Qt 下的COM组件开发

一,QAxObject

QAxObject是对COM组件的包装,QAxWidget是对的ActiveX控件的包装,简单理解功能性的封装我们一般就是普通的COM组件,如果涉及UI一般会用的ActiveX控件。有了这两个类几乎就可以开始简单调用组件了。

QAxObject和QAxWidget可以通过默认的构造函数建立一个空的COM组件对象(可以理解为COM容器),然后再把需要封装的组件放到空对象中,代码如下

QAxObject对象((QObject)0); //建立封装容器

object.setControl(QString :: fromUtf8(“{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}”)); //填充需要封装的COM组件到容器中

或者我们把上面的两步合并成一步,如下代码

QAxObject对象(“{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}”);

当然QAxWidget的代码和上面类似。

解决了导入COM组件和封装的问题,接下来最重要的就是如何使用接口和方法的问题。如果上面导入过程涉及的CLSID(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)对应就是一个CoClass问题就好办很多,直接可以调用这个的CoClass的方法。当然如果你手中没有COM组件的Qt的方法说明,这件事依然很难入手。其实COM是个自描述的结构,任何第三方软件是可以把这种描述化信息自动导出来的.QT有方法可以自动导出来的,参考如下代码

QString的DOC= object.generateDocumentation(); 

QFile outFile(“c:/debuglog.html”); 

outFile.open(QIODevice中::只写|QIODevice中::追加);QTextStreamTS(&不过outFile);

TS<<DOC<<ENDL;

导出后你会发现是一个非常好的HTML格式的帮助问题,里面对每一个方法都有调用的详细描述。参考帮助后就能开始自己调用了,

QVariantListparams0;

params0 << QVariant((int)(w.winId()));

params0 << QVariant1);

params0 << QVariantLicense”);

params0 << QVariant“”);

object .dynamicCall(“ShowStatusDialog(int,INT,QVariant,QVariant)“, params0);

二,dumpcpp

在Qt的安装目录下有dumpcpp.exe工具,可以将dll文件导出成Qt可以使用的.h和.C文件。例如:C:\Qt\Qt5.7.0\5.7\mingw53_32\bin\dumpcpp.exe

打开“命令提示符”,修改当前路径到dumpcpp文件所在文件夹。输入dumpcpp查看帮助。

dumpcpp ZCB_API.DLL 或者 dumpcpp ZCB_API.TLB

就会在当前文件夹下生成zcb_apilib.h和zcb_apilib.cpp文件。 

将上一步生成的zcb_apilib.h和zcb_apilib.cpp文件导入工程,就可以调用该COM组件的接口了,


你可能感兴趣的:(C,++,QT)