QT应用编程: windows下QT调用COM组件

简介: QT应用编程: windows下QT调用COM组件

一、环境介绍

操作系统: win10 64位


QT版本: 5.12.6


Visual Studio IDE 版本:  2017


示例工程下载链接:  https://download.csdn.net/download/xiaolong1126626497/14919797


二、创建COM组件

为了方便测试,我这里使用QT来创建COM组件,再由QT自己调用。 理论上任何语言生成的COM组件调用流程应该都是一样的。


QT创建COM的方法看这里:


(1)VS2017下使用QT生成COM组件:      https://blog.csdn.net/xiaolong1126626497/article/details/112556866


(2) QtCreate下生成COM组件:  https://blog.csdn.net/xiaolong1126626497/article/details/112550412



当前创建COM组件的工程我是使用VS2017+QT插件的方式生成的。

image.png

image.png

image.png

image.png

image.png

为了方便注册可以在目录下写个脚本:

image.png

 安装代码:

cd /d %~dp0
@regsvr32 ActiveQtServer_vs2017.dll
@exit

 卸载代码:

cd /d %~dp0
@regsvr32 /u ActiveQtServer_vs2017.dll
@exit

image.png

三、QtCreate里创建工程调用COM组件

3.1 创建工程

image.png

3.2 编写测试代码

image.png

#include <QApplication>
#include <QAxObject>
#include <QDebug>
#include <QFile>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
     QAxObject *mpAxObj;
    mpAxObj = new QAxObject();
    //指定调用的COM组件类ID,这个ID要填正确.
    mpAxObj->setControl("{fe8bb3a1-998e-4318-b4ee-4263a1cc06a2}");
    //导出支持调用的函数接口
    QString DOC = mpAxObj->generateDocumentation();
    QFile outFile("com_function.html");
    outFile.open(QIODevice ::ReadWrite|QIODevice ::Text);
    QTextStream TS(&outFile);
    TS<<DOC<<endl;
    //调用COM组件函数接口: 获取版本号
    QString result = mpAxObj->dynamicCall("VersionNumber()").toString();
    qDebug()<<"VersionNumber:"<<result;
    //调用COM组件函数接口: 求和计算
    QVariantList params ={100,200};
    int sum_val = mpAxObj->dynamicCall("sum(int, int)", params).toInt();
    qDebug()<<"sum:"<<sum_val;
    //调用COM组件函数接口: 显示界面
    mpAxObj->dynamicCall("show()");
    return a.exec();
}

3.3 工程pro文件

image.png

QT       += core gui
QT += axcontainer
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
    main.cpp
HEADERS +=
FORMS +=
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target 

3.4 运行测试

image.png

image.png

说明: 如何调用运行失败,记得把COM组件dll依赖的所有文件拷贝到现在测试程序运行的目录下,防止找不到依赖文件运行失败。

image.png

image.png

image.png

image.png

如果想将带界面的COM控件集成到当前QT工程里,可以参考这篇文章:

https://blog.csdn.net/xiaolong1126626497/article/details/113127300


目录
相关文章
|
1月前
|
安全 前端开发 Windows
Windows Electron 应用更新的原理是什么?揭秘 NsisUpdater
本文介绍了 Electron 应用在 Windows 中的更新原理,重点分析了 `NsisUpdater` 类的实现。该类利用 NSIS 脚本,通过初始化、检查更新、下载更新、验证签名和安装更新等步骤,确保应用的更新过程安全可靠。核心功能包括差异下载、签名验证和管理员权限处理,确保更新高效且安全。
42 4
Windows Electron 应用更新的原理是什么?揭秘 NsisUpdater
|
3月前
|
网络协议 API Windows
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
|
3月前
|
编译器 Windows
plugin cannot be loaded for module “QtQuick“ && Could not load the Qt platform plugin “windows“
本文讨论了在Qt应用程序中遇到的平台插件加载问题,包括具体的错误信息、解决方案和参考链接。问题表现为无法加载“QtQuick”模块的插件,并且无法找到“windows”平台插件。解决方案是修改环境变量`Qt5_DIR`以使用正确的Qt版本和编译器环境。
102 1
|
3月前
|
Windows
[原创]用MASM32编程获取windows类型
[原创]用MASM32编程获取windows类型
|
2月前
|
XML 缓存 前端开发
Electron-builder 是如何打包 Windows 应用的?
本文首发于微信公众号“前端徐徐”,作者徐徐深入解析了 electron-builder 在 Windows 平台上的打包流程。文章详细介绍了 `winPackager.ts`、`AppxTarget.ts`、`MsiTarget.ts` 和 `NsisTarget.ts` 等核心文件,涵盖了目标创建、图标处理、代码签名、资源编辑、应用签名、性能优化等内容,并分别讲解了 AppX/MSIX、MSI 和 NSIS 安装程序的生成过程。通过这些内容,读者可以更好地理解和使用 electron-builder 进行 Windows 应用的打包和发布。
202 0
|
3月前
|
JavaScript 前端开发 API
MASM32编程通过WMI获取Windows计划任务
MASM32编程通过WMI获取Windows计划任务
|
2月前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
56 0
|
3月前
|
API Windows
MASM32编程获取Windows当前桌面主题名
MASM32编程获取Windows当前桌面主题名
|
4月前
|
vr&ar C# 图形学
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
91 0
|
4月前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
78 0