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

news2024/9/27 12:26:07

作者: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/430189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hbase进阶操作——读流程与写流程介绍

系列文章目录 centos7虚拟机下hbase的使用案例讲解 文章目录 系列文章目录 一、hbase架构原理 1.1、StoreFile 1.2、MemStore 1.3、WAL 二、hbase的写流程 2.1、写流程的流程图 2.2、写流程的流程图说明 三、hbase读流程 3.1、读流程的流程图 3.2、读流程的流程图解…

C/C++|物联网开发入门+项目实战|指针|嵌入式C语言高级|C语言内存空间的使用-学习笔记(9)

文章目录2-3 : C语言内存空间的使用指针概述示例:指针修饰符指针运算符示例示例1多级指针例子省略argc(个数)的常用写法:参考: 麦子学院-嵌入式C语言高级-内存空间2-3 : C语言内存空间的使用 指针概述 内存类型资源地…

CPU工作原理

CPU(中央处理器)是计算机中的重要组件,它负责执行计算机程序中的指令。在了解CPU的工作原理之前,我们需要先了解一些基本概念。 指令和指令集 指令是计算机程序中的基本单位,它指示计算机执行某个操作。指令集是一组…

我在“Now In Android”中学到的 9 件事

我在“Now In Android”中学到的 9 件事 Now in Android是一款功能齐全的 Android 应用程序,完全使用 Kotlin 和 Jetpack Compose 构建。它遵循 Android 设计和开发最佳实践,旨在为开发人员提供有用的参考。 https://github.com/android/nowinandroid UI…

淘宝悄悄内测“店号一体”的新模式

4月17日消息,淘宝近日已开始小规模测试“店号一体”新模式。新模式下,淘宝店铺将与逛逛、直播等账号完全打通;此前针对达人及内容型商家的新店铺模式“视频内容店”也同步升级。 内测商家透露,目前在淘宝发布的图文、短视频、直播…

腾讯学长分享的这份Java面试八股文手册,让我GitHub下载量破百万!!!

一些不满现状,被外界的“高薪”“好福利”吸引的人,一般就在这时候毅然决然地跳槽了。 跳槽是为了寻求更好的发展,但在跳槽前我们也不能确定下家就是更好的归宿,这就更加需要我们审慎地去对待,不能盲目跳槽。 其次&a…

知识图谱专栏简介:数据增强,智能标注,文本信息抽取(实体关系事件抽取)、知识融合算法方案、知识推理、模型优化、模型压缩技术等

知识图谱专栏简介:数据增强,智能标注,文本信息抽取(实体关系事件抽取)、知识融合算法方案、知识推理、模型优化、模型压缩技术等 专栏链接:NLP知识图谱相关技术业务落地方案和码源 NLP知识图谱相关技术业…

程序员跳槽薪水涨了一倍,谈谈java工程师找新工作的八大技巧

大家好,这几天发生了一些事情,我找到了一份新工作,明天是第一天上班。我想先谈一下我的新工作待遇,因为我觉得相对来说还算比较满意。接下来我想谈一下我的个人经历,从毕业到现在的工作经历。第三个话题是我最近半个月…

k-d Tree算法

1.概述 本文介绍一种用于高维空间中的快速最近邻和近似最近邻查找技术——Kd- Tree(Kd树)。Kd-Tree,即K-dimensional tree,是一种高维索引树形数据结构,常用于在大规模的高维数据空间进行最近邻查找(Nearest Neighbor)和近似最近邻查找(Appro…

Java工程行业管理系统源码-专业的工程管理软件-提供一站式服务

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示1…

反向代理自建教程:你懂的

一、为什么需要自建反代 OpenAI提供了两种访问方式,一种是直接在ChatGPT网页端使用的Access Token方式,这种方式可以免费使用GPT-3.5模型,只需要登录即可使用。但缺点是不稳定,且无法扩展。另一种是使用API,注册用户可…

Nacos 客户端服务注册源码分析-篇三

Nacos 客户端服务注册源码分析-篇三 版本说明: 源码版本 nacos-1.4.2 Nacos 的核心功能点 服务注册: Nacos Client 会通过发送 REST 请求的方式向 Nacos Server 注册自己的服务,提供自身的元数据,比如 ip 地址以及端口等信息。Na…

Sentinal持久化到Nacos

Springboot应用整合Sentinel实现限流、熔断、降级笔记https://blog.csdn.net/chenjian723122704/article/details/130101875 Sentinel版本 1.8.6 Nacos版本 2.2.0 下载Sentinel源码 Sentinel1.8.6:https://github.com/alibaba/Sentinel/releases/tag/1.8.6 拷贝源…

AtCoder Beginner Contest 295——F - substr = S

蒟蒻来讲题,还望大家喜。若哪有问题,大家尽可提! Hello, 大家好哇!本初中生蒟蒻讲解一下AtCoder Beginner Contest 295这场比赛的F题! F - substr S 原题 Problem Statement You are given a string SSS consisti…

双塔模型:微软DSSM模型浅析

1.背景 DSSM是Deep Structured Semantic Model (深层结构语义模型) 的缩写,即我们通常说的基于深度网络的语义模型,其核心思想是将query和doc映射到到共同维度的语义空间中,通过最大化query和doc语义向量之间的余弦相似度,从而训…

2023好玩的解压游戏,压力大点开玩可以放松自己

你是不是经常感觉到压力大? 现代社会,竞争逐步激烈,不管是来自学习上,工作上,还是生活上的,压力都非常大! 这时候,我们要学会自我减压,有效的放松是为了更好地前行。 …

JavaWeb开发 —— MyBatis基本操作

目录 一、环境准备 二、删除操作实现 1. 根据主键删除 2. 删除(预编译SQL) 2.1 SQL注入 2.2 参数占位符 三、新增操作实现 1. 新增代码实现 2. 新增(主键返回) 四、更新操作实现 五、查询操作实现 1. 根据ID查询 1.1…

【Python】pip 和 conda install、list的区别,是否一致

【Python】pip 和 conda install、list的区别,是否一致 文章目录【Python】pip 和 conda install、list的区别,是否一致1. 介绍2. 看效果2.1 首先,conda 创建环境2.2 然后,激活环境2.3 查看环境下已经安装包列表2.4 安装新的包&am…

【2023最新】超详细图文保姆级教程:App开发新手入门(2)

上章节我们已经成功的创建了一个 App 项目,接下来我们讲述一下,如何导入项目、编辑代码和提交项目代码。 Let’s Go! 4. 项目导入 当用户创建一个新的应用时,YonStudio 开发工具会自动导入模板项目的默认代码,不需要手动进行代…

C语言的Hello World的汇编剖析(64位 Intel架构)

C语言的Hello World的汇编剖析(64位 Intel架构) 文章目录C语言的Hello World的汇编剖析(64位 Intel架构)一. 前提准备二. C转换为汇编操作准备2.1 创建目录&复制代码2.2 C文件转换为汇编文件三. 剖析汇编文件四. 指令相关五. …