Qt中调用C#制作的com组件

2023-11-06

作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

前言

这里记录一下在 Qt 64位程序中调用 C# 制作的 com 组件的流程,方便后期自己回顾。

1. 了解 TLB 格式

拿到的依赖库最重要的有一个 xxx.dll 和一个 xxx.tlb,和一些其他的 dll 依赖库,这里先了解一下什么是 TLB 格式的文件。TLB 文件是对象链接和嵌入(OLE)或 ActiveX 程序的定义文件,通过 TLB 文件,用户可以得知你的 .DLL 文件中的 COM 接口、类、常量等信息。

2. 注册 DLL 到系统中

使用 Windows 的 regsvr32 往系统中注册 com 组件报如下错误

在这里插入图片描述

原因是因为 .net 的 DLL 和非托管的 DLL 的注册方式不一样。非托管的 DLL 注册可以直接在 cmd 中输入 regsvr32 xxx.dll进行注册,但是 .net 的 DLL 需要通过它 .net 自己的工具进行的注册,我们可以在菜单栏中找到 vs 的开发者人员命令行工具

在这里插入图片描述
切换路径到 C:\Windows\Microsoft.NET\Framework\v4.0.30319

在这里插入图片描述

通过 RegAsm.exe xxx.dll命令来注册 .Net 的 DLL
如果是64位的库,则需要切换到 Framework64 下,选择的版本不对应会报 不是有效的 .Net 程序集

在这里插入图片描述

注册成功则如下所示:

在这里插入图片描述

3. 解析 TLB 文件

为了方便在 Qt 中调用,我们借助 dumpcpp 工具生成头文件和源文件,生成的文件编译有可能会报错需要自己修改一下。
1)把 TLB 文件拷贝到 Qt 的目录下,例如 D:\Qt\Qt5.12.8\5.12.8\msvc2017_64\bin
2)命令行执行 dumpcpp xxx.tlb
3)自动生成可以在 Qt 中调用的 .h 和 .cpp 文件,编译报错的话自己修改下,可能是命名空间名称与类名重合了

或者自己去定义一个类,通过 setControl 设置 UUID 的方式来初始化 COM 组件,之后也可以调用里面的函数,需要结合开发文档自己去实现。像这样 ctrl->setControl("{8E27C92B-1264-101C-8A2F-040224009C02}");

4. 在 Qt 中调用

1)构造使用 COM 对象和 ActiveX 控件的 Qt 应用程序,需要向.pro文件中加入
QT += axcontainer

2)导入刚才自动生成的 .h .cpp
3)实例化对象即可调用函数
4)如果出现以下错误,则证明 COM 组件没有注册成功

CoCreateInstance failure (没有注册类)
QAxBase::setControl: requested control {CA69969C-2F27-41D3-954D-A48B941C3BA7} could not be instantiated

参考连接

  1. http://www.qtcn.org/bbs/simple/?t23559.html
  2. http://www.javashuo.com/article/p-mxxhuudi-en.html
  3. https://www.cnblogs.com/Leventure/p/16998111.html
  4. https://bbs.csdn.net/topics/391932651
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt中调用C#制作的com组件 的相关文章

  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 向 ExpandoObject 添加方法时,“关键字 'this' 在静态属性、静态方法或静态字段初始值设定项中无效”

    我尝试向 ExpandoObject 添加一个动态方法 该方法将返回属性 动态添加 给它 但它总是给我错误 我在这里做错了什么吗 using System using System Collections Generic using Sys
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • C 语言中 =+(等于加)是什么意思?

    我碰到 与标准相反 今天在一些 C 代码中 我不太确定这里发生了什么 我在文档中也找不到它 In ancientC 版本 相当于 它的残余物与最早的恐龙骨头一起被发现 例如 B 引入了广义赋值运算符 使用x y to add y to x
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • System.Runtime.InteropServices.COMException(0x80040154):[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 C 项目中遇到异常 System Runtime InteropServices COMException 0x80040154 检
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我

随机推荐

  • token做自动登录

    token 身份验证 token 前端自动登录 OpenSSL perl软件安装 https blog csdn net sunhuansheng article details 82218678 OpenSSl Perl这个软件安装无要求
  • vs2015安装_VS2015安装教程

    1 vs2015下载地址 https visualstudio microsoft com zh hans downloads 下载完后解压软件后以管理员身份运行右图的文件 2 开始安装后 会出现等待界面 可能需要几分钟 3 初始化安装程序
  • Python的学习笔记案例6--判断密码强度5.0

    本节课主要讲原来分散的方法封装成一个类 使之成为一个整体 方便调用 就是面向对象编程的思想 1 面向过程编程和面向对象编程的区别 面向过程 POP 以程序执行过程为设计流程的编程思想 面向对象 OOP 以事物为中心的编程思想 什么是对象 O
  • 服务器响应的jsp文件,JSP服务器响应

    JSP服务器响应 Response响应对象主要将JSP容器处理后的结果传回到客户端 可以通过response变量设置HTTP的状态和向客户端发送数据 如Cookie HTTP文件头信息等 一个典型的响应看起来就像下面这样 HTTP 1 1
  • OpenSceneGraph-OpenSceneGraph-3.6.5源码编译

    前言 准备 git 不是必须 使用git得到的源码是3 6 5版本的 CMake vs2019 VS017可以 我这里用的vs2019 osg主页 源码下载 Cmake编译源码 编译报错 CMake Warning dev at F Pro
  • SDWebImage 笔记

    SDWebImage托管在github上 https github com rs SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片 具有缓存管理 异步下载 同一个URL下载次数控制和优化等特征 使
  • A股上市有什么条件?A股上市条件有哪些?

    A股的上市条件有这几点 一 资格要求 1 发行人应当是依法设立且合法存续的股份有限公司 经国务院批准 有限责任公司在依法变更为股份有限公司时 可以采取募集设立方式公开发行股票 2 发行人自股份有限公司成立后 持续经营时间应当在3年以上 但经
  • 【Web架构】使用 JSON API 的好处

    在 API 工艺的世界里 没有比设计更受热议的领域了 从 REST gRPC 到 GraphQL 有许多方法可以设计和标准化 Web API 交互 今天 我们将注意力转向另一种方法 JSON API JSONAPI org 上详细介绍的用于
  • java字符数组初始化_Java 字符串(一)字符串初始化

    一 String类概述 1 概述 java lang String类代表字符串 Java程序中所有的字符串文字 例如 abc 都可以被看作是实现此类的实例 String 是引用数据类型 不是基本数据类型 类String 中包括用于检查各个字
  • CVE-2021-30116: Kaseya VSA 远程代码执行漏洞通告

    报告编号 B6 2021 070601 报告来源 360CERT 报告作者 360CERT 更新日期 2021 07 06 0x01 漏洞简述 2021年07月06日 360CERT监测发现Kaseya发布了VSA管理软件的风险通告 漏洞等
  • 春秋云镜靶场挑战——Tsclient

    目标IP 39 98 73 212 网络拓扑 入口机器 1 使用namp对目标IP进行扫描 发现目标开放了1433端口 MSSQL服务 3389端口 RDP服务 2 可以先爆破MSSQL服务 如下可以看出成爆破出密码 3 使用MDUT工具连
  • Leetcode168. Excel表列名称

    力扣 LeetCode 官网 全球极客挚爱的技术成长平台 题解 力扣 LeetCode 官网 全球极客挚爱的技术成长平台 代码如下 class Solution public String convertToTitle int column
  • 【华为机试题解】奥特曼打怪兽

    大概题意 在一个N N的正方形区域 每个小格可能有三种状态 值为0 正常可通过 值为1 奥特曼可通过 同时还可以消灭怪兽 消灭后值变为0 消灭怪兽数量 1 值为 1 有大石头 奥特曼无法通过 奥特曼需要先从上往下走 这个过程只能向下或者向右
  • 正则表达式替换多个相同的连续字符串为一个字符串

    要替换的字符串 http localhost 9010 asqmasqm manage user 需要替换多个连续asqm为一个asqm 正则表达式 asqm 1 g 1 替换结果为 http localhost 9010 asqm man
  • Fedora 17 安装 ACE6.1

    下载 下载地址 http download dre vanderbilt edu 下载ACE 6 1 0 tar bz2 这个软件包只包含ACE 不包含TAO等附加的东西 另外bz2压缩格式的源码包比较小 只有7 55M 解压 mkdir
  • 若依 vue webpack 打包 tomcat部署 刷新404 问题处理思路

    1 参考若依官网中的添加WEB INF方法 若依文档说明 2 检查 vue config js中的生产环境配置 检查publicPath中的路由地址是否为tomcat中的前端路径 例如tomcat 的访问路径是localhost 8080
  • wpsppt设置页码和总页数_wps的ppt页码怎么设置

    wps的ppt页码怎么设置 PPT中如何设置页码那 你知道吗 下面是小编为大家推荐wps的ppt页码设置的内容 希望能够帮助到你 欢迎大家的阅读参考 设置步骤 新建一个PPT 选择 离子 模板 然后猛敲回车 插入多张PPT页面 点击 插入
  • SpringBoot 添加对JSP的支持(附常见坑点)

    序言 SpringBoot默认不支持JSP 如果想在项目中使用 需要进行相关初始化工作 为了方便大家更好的开发 本案例可直接作为JSP开发的脚手架工程 SpringBoot War JSP 常见问题 1 修改JSP需重启才能生效 在生产环境
  • Pycharm 使用pip安装包时候报错 no such option --build-dir

    Pycharm 使用pip安装包时候报错 no such option build dir 原因 pip版本过高 解决办法 对pip降级 等待pycharm更新即可 打开命令行 找到python所在的位置 输入 pip install pi
  • Qt中调用C#制作的com组件

    作者 billy 版权声明 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 前言 这里记录一下在 Qt 64位程序中调用 C 制作的 com 组件的流程 方便后期自己回顾 1 了解 TLB 格式 拿到的依赖库最重要的有一