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调用外部方法的决解方法

  • 相关阅读:
    Laravel中如何将单个routes.php分割成多个子文件
    PHP中“==”运算符的安全问题
    一些需要禁用的PHP危险函数
    使用PHP QR Code生成二维码
    gulp详细入门教程
    h5+分享到微信、朋友圈代码示例
    学习地址
    关于this 方法中套方法中找 立即执行的问题 等问题
    判断条件问题是否存在
    jsp 基础语法
  • 原文地址:https://www.cnblogs.com/bsyblog/p/8958691.html
Copyright © 2011-2022 走看看