1、开发环境
操作系统:Windows10
编译环境:QT5.14.2 + Visual Studio2017
关于在QT中以exe形式进程外组件形式进行COM编程可以参考文章:QT中的COM编程(exe进程外组件形式)。
由于在进行exe进程外组件编程时发现,对于COM组件的注册及卸载用起来不是很方便(水平不够-_-!,欢迎一起交流),所以就想采用以dll的形式进行COM编程,当采用dll形式时,就可以采用COM编程标准的注册与卸载组件方式了,具体可参考:COM的简单介绍中的 3.2 章节内容。
所以,在本文中主要记录在QT中以dll进程内组件的形式进行COM编程。当采用dll进程内组件的形式时,推荐使用VS进行COM组件的开发,QT采用MSVC构建套件调用COM组件,所以需要在VS中配置QT插件,可参考:VS2017配置QT插件。
2、VS2017中开发COM组件
2.1、创建ActiveQt Server工程
在VS2017中,新建项目,选择 Qt -> Qt ActiveQt Server:
建立工程如下:
当建立 Qt ActiveQt Server 工程是,编译器会自动配置好相关属性,比如 clsid 等,以及工程的生成形式:
双击 xxx.ui 文件,打开QT设计师,编辑界面,在界面上拖放一个日历控件:
添加测试函数:
然后生成项目:
此时就会显示,dll已经成功被注册!(需要注意的是,VS2017一定要以管理员身份打开!)
此时可以看到 ActiveQtServerTest_dll已经被注册进注册表中,其中CLSID为 CEA2C589-,是 QAXFACTORY_DEFAULT 宏定义中的第一个GUID:
2.2、发布dll并进行网页测试
首先需要寻找dll所需要的依赖库,仿照 QT中的COM编程(exe进程外组件形式)中的 2.3.1章节中的内容进行发布:
会发现多出了很多相关的依赖库文件:
仿照 QT中的COM编程(exe进程外组件形式)中的 2.3.2章节中的内容,编写一个xx.html文件进行测试,其中的 classid换成自己的id(即上文中的CLSID),然后打开:
2.3、自注册
为了方便注册与卸载,可以在 dll目录 下添加以下连个文件分别用于dll组件的注册与卸载:
Register.bat:
cd /d %~dp0
@regsvr32 ActiveQtServerTest_dll.dll
@exit
Unregister.bat:
cd /d %~dp0
@regsvr32 /u ActiveQtServerTest_dll.dll
@exit
注册:
卸载:
(需要注意的是,运行这两个.bat文件都需要以管理员的身份打开运行!)
3、QT Creator中调用COM组件
参考 QT中的COM编程(exe进程外组件形式)中的 3.2.1 章节中的内容,直接套用它的代码,只需要把 clsid 改成该COM组件的就可以了:
运行测试: