java queryinterface_JS和C#访问遇到QueryInterface调用出错「建议收藏」

java queryinterface_JS和C#访问遇到QueryInterface调用出错「建议收藏」在原来的WinForm里,我们只要在窗体类的头部添加属性[System.Runtime.InteropServices.ComVisibleAttribute(true)],然后webBrowser1.ObjectForScripting=this;这样设置完后,页面上的JS就能访问窗体类的方法了,但是添加WeifenLuo.WinFormsUI.Docking.DockContent作为窗…

大家好,又见面了,我是你们的朋友全栈君。

在原来的WinForm里,我们只要在窗体类的头部添加属性[System.Runtime.InteropServices.ComVisibleAttribute(true)],然后 webBrowser1.ObjectForScripting = this;这样设置完后,页面上的JS就能访问窗体类的方法了,但是添加WeifenLuo.WinFormsUI.Docking.DockContent作为窗体的父类后如果这样设置却会出现如下提示:

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

方法一:非常明显是由于WeifenLuo.WinFormsUI.Docking.DockContent不是可见类。所以可以直接到该类前面添加

[System.Runtime.InteropServices.ComVisibleAttribute(true)]即可。

方法二:为了不修改开源的组件,可以通过修改使用过程;

webBrowser1.ObjectForScripting = this这句语句就是让对象和Js脚本能够关联上,且该对象是能够ComVisibleAttribute的属性,我们知道DockContent不可以ComVisibleAttribute,所以在它继承下的类当使用到该类后,也就是不能ComVisibleAttribute,Form是ComVisibleAttribute的;所以我们可以构造一个类是ComVisibleAttribute的,通过webBrowser1.ObjectForScripting = this来绑定我们自己的那个类。那么浏览器调用c#的方法,当然是在该类里的方法。—-也就是构造一个中间类来沟通JS和C#数据访问。

附加:若是想去除该异常提示可以:

调试–>异常—>Managed Debugging Assistants—> NonComVisibleBaseClass 将其复选框去除点击确定即可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148526.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C++ merge函数

    C++ merge函数C++merge函数首先,merge()函数调用前必须保L1,L2是有序的,然后才能调用merge()函数。所以应该做两处更改:1.在worker类的公有函数中添加以下定义排序准则的函数。booloperator<(constworker&kk) { returnthis->age<kk.getAge(); }2.在调用…

    2022年6月7日
    146
  • 卸载vs2013_如何卸载vs2015

    卸载vs2013_如何卸载vs2015最近編譯代碼時由於出現頭文件不匹配,需要升級VS2005,升級比較麻煩,乾脆直接過渡到VS2008得了.先把.NETFramework從1.0一直刪除到3.0,再刪除一些相關依賴包時,安裝程式出錯.找了一下資料,正確的安裝過程如下:VisualStudio2005进入控制面板,运行添加或删除程序卸载"MSDNLibraryforVisualStudio2005Beta"卸载"…

    2022年9月23日
    5
  • 对于RFID-RC522 模块的读写操作【Arduino】[通俗易懂]

    对于RFID-RC522 模块的读写操作【Arduino】[通俗易懂]玩儿板子–用Arduino链接RFID-RC522型号的Rfid模块。并且用放出实例代码目前百度基本上搜不到RC522板子的具体操作代码,基本上贴出来的只有接线,所以这次直接放出读写操作的代码算是做贡献吧。这个是板子建议:把送的两个插头,焊上去是最好的接线:

    2022年9月19日
    0
  • Root apk 2021_proguard混淆jar包

    Root apk 2021_proguard混淆jar包backdoor-apk从名字上我们就能知道它的用途了,没错就是用来制作APK后门的。这款工具使用起来非常方便,而且功能也很强大!话不多说,下面我们直接进入正题。首先,让我们对它进行安装,在安装前我们需要先安装它的一些依赖lib库文件:apt-getinstalllib32stdc++6lib32ncurses5lib32z1这里询问我们,对这些安装的服务,当他们更新时不再进行询…

    2022年8月20日
    9
  • 推断的电话号码是否合法

    推断的电话号码是否合法

    2022年1月14日
    57
  • Python scikit-learn (metrics): difference between r2_score and explained_variance_score?

    Python scikit-learn (metrics): difference between r2_score and explained_variance_score?

    2021年11月21日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号