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


相关推荐

  • matlab遗传算法gatbx工具箱介绍及安装说明

    matlab遗传算法gatbx工具箱介绍及安装说明一 遗传算法简介 官网 http www geatpy com tutorials 遗传算法是以自然选择和遗传理论为基础 将生物进化过程中适者生存规则与群体内部染色体的随机信息交换机制相结合的高效全局寻优搜索算法 这样解释对于广大的初学者而言是既神秘又高大上的 实际上 我们可以这样理解 遗传算法可以解决传统的目标优化问题 但是 它摒弃了传统的搜索方式 如遍历

    2026年3月17日
    1
  • plsqldev8.0下载和注册码「建议收藏」

    plsqldev8.0下载和注册码「建议收藏」[b]关键词:PL/SQL,下载,plsqldev,注册码,plsqldev711,汉化文件[/b]PL/SQLDeveloper是一种集成的开发环境,专门用于开发、测试、调试和优化OraclePL/SQL存储程序单元,比如触发器等。PL/SQLDeveloper功能十分全面,大大缩短了程序员的开发周期。[url]http://www.kutoku.info/software…

    2022年4月25日
    31
  • javascript~获取当前iframe的id和修改iframe属性

    javascript~获取当前iframe的id和修改iframe属性获取 varid self frameElement getAttribute id 修改 id window parent document attr id 引用 https blog csdn net article details

    2026年3月16日
    2
  • python进销存系统代码_继续进销存系统

    python进销存系统代码_继续进销存系统事情必须一件一件做好。觉得自己太厉害会长痘。JinternalFrame的使用跟JFrame几乎一样,可以最大化、最小化、关闭窗口、加入菜单等功能;唯一不同的是JinternalFrame是lightweightcomponent,也就是说JInternalFrame不能单独出现,必须依附在最上层组件上。由于这个特色,JInternalFrame能够利用java提供的LookandFeel…

    2022年5月31日
    50
  • dump文件分析工具有哪些_如何解析xml文件

    dump文件分析工具有哪些_如何解析xml文件/前言/在讲解Mat工具之前我们先来看下几个关于Dump/文件的问题Dump文件是什么Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中我们拿到Dump文件有什么用的?假如JVM因为内存溢出的原因宕机了,而程序的日志里面并没有关于溢出所在对象的信息,此时我们就需要通过分析Dump文件来找到问题原因Dump文件怎么生成?第一种在启动JVM时指定参数 #指定生成Dump文件的异常类型 -XX:+HeapDumpOnOutOf

    2022年10月2日
    4
  • ubuntu查看端口是否打开

    ubuntu查看端口是否打开安装netcatsudoapt-getinstallnetcat检测端口#nc-zvipportnc-zv192.168.1.1522

    2025年8月14日
    3

发表回复

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

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