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

    起风了,努力生存
  • 相关阅读:
    java中如何创建带路径的文件
    Java 判断文件夹、文件是否存在、否则创建文件夹
    Risk Adaptive Information Flow Based Access Control
    13-回顾
    Activiti操作数据库中文乱码
    12-执行流程(启动流程实例、查询任务列表、办理任务)
    11-查询流程定义列表
    eclipse-jee-mars-2-win32-x86_64安装activiti
    myeclipse10安装了activiti插件后创建BPMN 文件时报错,
    10-部署流程定义
  • 原文地址:https://www.cnblogs.com/StivenYang/p/8441280.html
Copyright © 2020-2023  润新知