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)
上一篇 2022年6月16日 上午6:00
下一篇 2022年6月16日 上午6:00


相关推荐

  • python求余数符号_python取余运算符是什么?

    python求余数符号_python取余运算符是什么?python 取余运算符是什么 python 取余运算符是 即表示取模 返回除法的余数 假设变量 a 10 b 20 那么 b a 输出结果 0Python 语言支持以下类型的运算符 1 算术运算符 2 比较 关系 运算符 3 赋值运算符 4 逻辑运算符 5 位运算符 6 成员运算符 7 身份运算符 8 运算符优先级 python 取整与取余规则 1 运算取整时保留整数的下界 即偏向于较

    2025年9月13日
    5
  • java free hd 798,[https://www.798ziyuan.com/]Java入门级项目全程实录V2.0

    java free hd 798,[https://www.798ziyuan.com/]Java入门级项目全程实录V2.0Java入门级项目全程实录V2.0798资源网免责声明:[Java入门级项目全程实录V2.0]由分享人op**开源于2018-09-1119:35上传到百度网盘。此页面由蜘蛛程序自动抓取,以非人工方式自动生成,只作交流和学习使用。本网站本身不储存任何资源文件,其资源文件的安全性和完整性需要您自行判断,感谢您对本站的支持。Java入门级项目全程实录V2.0|____《Java入门级项…

    2022年7月7日
    19
  • Linux环境下银行家算法,C语言实现 操作系统 银行家算法

    Linux环境下银行家算法,C语言实现 操作系统 银行家算法C语言实现操作系统银行家算法/**************************************************银行家算法:主要的思想是舍大取小,先满足小的,最后才满足大的。author:lybdate:2014/10/15***************************************************/#include#include#inc…

    2022年7月22日
    15
  • 【算法】震惊!!!史上最详细的卡特兰数浅谈!!!

    【算法】震惊!!!史上最详细的卡特兰数浅谈!!!我是标题党卡特兰数简介卡特兰数是组合数学中的一种著名数列 通常用如下通项式表示 为了不与组合数 CCC 冲突 本文用 fff 表示卡特兰数 f n C2nnn 1f n frac C 2n n n 1 f n n 1C2nn 当然 卡特兰数也是有递推式的 f n i 0n 1f i f n i 1 f n sum i 0 n 1 f i times

    2026年3月19日
    2
  • Unable to preventDefault inside passive event listener due to target being treated as passive 怎么办?

    Unable to preventDefault inside passive event listener due to target being treated as passive 怎么办?翻译一下:chrome监听touch类事件报错:无法被动侦听事件preventDefault,是新版本chrome浏览器报错。说明:说一下这个preventDefault()是个什么鬼,这个是取消默认事件的,如果这个函数起作用的,比如默认的表单提交,a链接的点击跳转,就不好用了。原因:google浏览器为了最快速的相应touch事件,做出的改变。历史:当浏览器首先对默认的事件进行响应的…

    2025年8月19日
    4
  • idea激活码20213月最新在线激活「建议收藏」

    idea激活码20213月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    255

发表回复

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

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