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


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

  • 相关阅读:
    Docker之Harbor
    idea 代码块编辑(批量列编辑)快捷键 -- idea version 2018 不常用
    mysql 去除表中重复的数据,保留id最小的数据信息
    打家劫舍(动态规划+滚动数组+取模运算优化)
    利用线程异步调用
    idea 2019激活码
    mysql导出PDM表结构并带有注释
    安装GO
    GO语言
    项目启动
  • 原文地址:https://www.cnblogs.com/miner007/p/3822404.html
Copyright © 2020-2023  润新知