本方法使用qt工具dumpcpp 为DLL生成.h/.cpp文件调用C# COM组件
1.注册DLL
- 运行CMD命令,执行
regsvr32 xxx.dll
, 注册COM组件,若失败,尝试以管理员运行CMD。
2. 生成.h/.cpp文件,加入工程
-
运行CMD命令,执行
dumpcpp xxx.dll
, 生成.h/.cpp 文件
-
把生成的文件引用到工程上,并在 .pro文件上加上
QT += axcontainer
3.获取COM组件的uuid
有两种方法:
3.1 .h文件查找
- 在生成的.h文件 搜索
setControl
,就可得到该COM 组件的guid
3.2 通过oleview工具查找
- 若没有听过该工具,百度一下。
4.代码调用
准备工作已完成,现在就是要怎么调用COM 组件的方法
- 创建QAxObject 对象 , setControl 第三部获取到的uuid
mpAxObj = new QAxObject();
mpAxObj->setControl("{12A22619-8B4E-45DF-BCC9-15EBDEEB8483}");
- 调用方法, 以下下是dumpcpp 生成的.h文件
class OS2DLL_EXPORT IComPlus : public QAxObject
{
public:
IComPlus(IDispatch *subobject = 0, QAxObject *parent = 0)
: QAxObject((IUnknown*)subobject, parent)
{
internalRelease();
}
/*
Method Close
*/
inline int Close();
/*
Method Open
*/
inline int Open(const QString& CommName, int BaudRate);
};
- 调用Open函数
QList<QVariant> list = {"COM1", 9600};
auto result = mpAxObj->dynamicCall("Open(QString, int)", list);
qDebug() << "result:" << result.toInt();
- 调用Close函数
auto result = mpAxObj->dynamicCall("Close()");
qDebug() << "result:" << result.toInt();
至此完成调用C# COM组件的操作流程了, 可以参考下官方文档QAxObject 使用方法。猜测不同的语言也可以这么操作。