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

  • 相关阅读:
    Can't remove netstandard folder from output path (.net standard)
    website项目的reference问题
    The type exists in both DLLs
    git常用配置
    Map dependencies with code maps
    How to check HTML version of any website
    Bootstrap UI 编辑器
    网上职位要求对照
    Use of implicitly declared global variable
    ResolveUrl in external JavaScript file in asp.net project
  • 原文地址:https://www.cnblogs.com/bsyblog/p/8958691.html
Copyright © 2011-2022 走看看