码迷,mamicode.com
首页 > Web开发 > 详细

JS和C#访问遇到QueryInterface调用出错

时间:2014-07-07 00:42:04      阅读:447      评论:0      收藏:0      [点我收藏+]

标签:winform   使用   数据   for   js   ui   

在原来的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 将其复选框去除点击确定即可。

 

JS和C#访问遇到QueryInterface调用出错,布布扣,bubuko.com

JS和C#访问遇到QueryInterface调用出错

标签:winform   使用   数据   for   js   ui   

原文地址:http://www.cnblogs.com/miner007/p/3822404.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!