C#-winform调用COM组件(COM组件由Qt开发)
一、场景介绍
在项目开发中,需要Qt与C#进行混合编程,完成项目开发。C#这边作为主框架,Qt负责编写插件,将功能模块通过COM组件的形式封装注册,再由C#调用、交互完成最终的项目。
程序开发环境: win10 64位
编译器: VS2017
Qt版本: Qt5.12.6
二、Qt封装COM组件
2.1 环境介绍
为了方便演示整体流程,我这里先利用Qt新建一个简单的项目,编译成COM组件进行注册,再由C#调用。
我这里Qt程序是在VS2017里+Qt插件进行开发的,主要是在VS里新建ActiveQtServer
比较方便,注册个方面都比较容易。
2.2 新建工程
接下来就是新建工程的步骤:
到此,一个空的工程已经新建完毕。
2.3 空工程编译测试
新建完毕之后,先编译一下,测试工程注册是否正常 。
直接选择项目,右键选择重新生成。
正常情况下,生成最终是提示服务注册成功。
2.4 注册失败问题解决
如果失败,会出现下面这种情况。
失败一般情况是环境变量造成的,也就是说注册的时候,找不到Qt程序需要的相关动态库。 这个问题好解决,直接在生成dll的目录下,利用Qt自带的工具windeployqt.exe
搜索一下相关的库,拷贝过来即可。
注意: 如果Qt用到了其他的第三方库,需要自己手动去将相关dll拷贝过来。
在目录下,我们可以看到dll已经生成了。
打开当前Qt使用的编译器窗口,运行工具搜索拷贝动态库。
发布成功:
然后再去注册,即可成功。
2.5 其他注册失败问题总结
注册失败的问题一般有以下情况:
(1)用到的dll找不到,确定所需要的dll是不是都在当前目录下。
(2)被电脑安全软件拦截了,关闭360这些安全软件
(3)代码里有问题,检查构造函数和析构函数代码,特别是析构函数,检查是否有空指针,非法内存访问之类的问题,如果找不到语法问题,可以将构造函数和析构函数代码部分屏蔽,进行测试。寻找问题。
2.6 增加功能
为了方便测试, 这边Qt里设计一个简单的界面,开放1个公共接口出去,方便C#调用,进行交互测试。
界面加了一个标签控件,要实现的效果是,C#调用开发的接口,可以修改这个标签控件的内容。
增加代码:
然后编译,注册。
到此,Qt的COM组件已经注册成功。 对外提供了一个set_text
方法,外部可以调用set_text
这个方法,修改UI界面上标签控件显示的数据。
三、C#建立工程调用COM组件-winform
3.1 新建项目
打开工具箱。
选择常规,鼠标右键,选择 选择项
。
找到刚才注册的COM组件,选择。 (名字就是刚Qt工程的名字)。
选择之后,拖到界面的控件效果如下: 就是刚才Qt开发的组件。
3.2 测试接口调用
先运行正常拖拽之后的效果:
然后,调用组件的接口,修改内容。
写代码,调用接口。
运行效果:
3.3 运行64位程序
默认新建的工程都是x86,如果COM组件是64位的,那么C#这边也可以运行64位程序去调用。
在属性里找到设置,去掉首选32位
即可。
3.4 打开控制台
在调用QT的组件过程中,肯定少不了调试,经常需要进行查看控制台的输出找问题。
打开控制台看Qt组件的输出。
在属性里找到应用程序,修改输出类型为控制台即可。
- 点赞
- 收藏
- 关注作者
评论(0)