zoukankan      html  css  js  c++  java
  • wpf 错误 执行了 QueryInterface 调用,请求提供 COM 可见的托管类“BoilerMonitoringV1._0.MapControl”的默认 IDispatch 接口。

    在做wpf嵌入地图时,在自定义的WebBrowser 里面使用JavaScript调用外部方法的时报的错误

    在原来的WinForm里 我们只要在窗体类设置的头部设置个 [System.Runtime.InteropServices.ComVisibleAttribute(true)]

    然后 webBrowser1.ObjectForScripting = this; 

    这样设置完后 页面上的JS就能访问我们程序里面的方法了,但是在WPF里如果这样设置的话会提示一大串错误提示:

    执行了 QueryInterface 调用,请求提供 COM 可见的托管类“Cloud.MainWindow”的默认 IDispatch 接口。不过,由于该类没有显式默认接口,并且是从非 COM 可见的类“System.Windows.Window”派生的,QueryInterface 调用将失败。这样做的目的是避免非 COM 可见的基类受 COM 版本规则的约束。

    为什么会出这个错误我也不清楚... 

    然后Google下国外的网站发现了一种解决办法,新建一个类

        [System.Runtime.InteropServices.ComVisibleAttribute(true)]//将该类设置为com可访问 
        public class ObjectForScriptingHelper
        {
            MapControl mainWindow;
    
            public ObjectForScriptingHelper(MapControl main)//注意MapControl要写成你自己项目中的对象名
            {
                mainWindow = main;
            }
    
            //这个方法就是网页上要反问的方法
            public void HtmlCmd(string cmd)
            {
    
                MessageBox.Show(cmd);
    
            }
        }

    然后在我们的WPF窗体加上调用

    ObjectForScriptingHelper helper = new ObjectForScriptingHelper(this);
    webBrowser.ObjectForScripting =  helper;

    OK 这样就可以了!

    注:这个问题折腾了我好久,头疼的要死,终于看到一篇好文章一下子就解决了,所以把原文复制过来
    原文链接:

    WPF的WebBrowser 里面使用JavaScript调用外部方法的决解方法

  • 相关阅读:
    使用图形界面调试arm程序: insight + gdb
    skyeye相关命令简介
    /bin/sh: can
    安装skyeye1.3.3 过程中可能遇到的问题
    linux下ARM汇编程序的调试
    ARM标准汇编与GNU汇编
    从ARMASM汇编到GNU ARM ASM汇编
    How much faster is assembly language?
    A number of problems from coded in ARM assembly language Problems
    An exploration of ARM assembly language
  • 原文地址:https://www.cnblogs.com/bsyblog/p/8958691.html
Copyright © 2011-2022 走看看