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

原文地址::https://blog.csdn.net/xiaolong1126626497/article/details/112978956?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-8.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-8.control

相关文章

1、Qt下使用微软的TTS----https://www.pianshen.com/article/47981473113/

2、Qt 下的COM组件开发----https://blog.csdn.net/jx1228/article/details/7065474?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242

 

一、环境介绍
操作系统: 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插件的方式生成的。

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

  安装代码:

cd /d %~dp0
@regsvr32 ActiveQtServer_vs2017.dll
@exit
  卸载代码:

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


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


3.2 编写测试代码


#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文件


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 运行测试


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

 

 

 

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

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

 

 

下面公众号里有全套的QT基础教程,C++、单片机、Linux基础教程。欢迎关注。

 

 

 
————————————————
版权声明:本文为CSDN博主「DS小龙哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaolong1126626497/article/details/112978956

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值