本帖最后由 xiaolin 于 2023-8-15 13:28 编辑
1、开发环境:windows10 64bit; qt 5.15.2 ; msvc2019 64bit;qt creator 5.0.3
2、QAxObject::generateDocumentation() ,QAxObject对象函数导出的接口函数如下所示:
slot: int GetStagePosition(QVariant& x, QVariant& y, QVariant& z, QVariant& t, QVariant& r, QVariant& m);
导出的文档给出了两种调用方法: int GetStagePosition (QVariant& x, QVariant& y, QVariant& z, QVariant& t, QVariant& r, QVariant& m) [slot]
使用信号去调用:
QObject::connect(sender, SIGNAL(someSignal(QVariant&, QVariant&, QVariant&, QVariant&, QVariant&, QVariant&)), object, SLOT(GetStagePosition(QVariant&, QVariant&, QVariant&, QVariant&, QVariant&, QVariant&)));
或者直接调用:
QVariantList params = ... int result = object->dynamicCall("GetStagePosition(QVariant&, QVariant&, QVariant&, QVariant&, QVariant&, QVariant&)", params).toInt();
3、按照第一种方法去尝试:
QObject::connect(this, SIGNAL( sig_GetStagePosition(QVariant&,QVariant&,QVariant&,QVariant&,QVariant&,QVariant&) ), m_axObject, SLOT( GetStagePosition(QVariant&,QVariant&,QVariant&,QVariant&,QVariant&,QVariant&) ));
sig_GetStagePosition:这是我自己定义的信号 m_axObject:这是 QAxObject 的对象.
我放到按钮里面去触发, QVariant varX, varY, varZ, varT, varR, varM; emit sig_GetStagePosition(varX, varY, varZ, varT, varR, varM);
当我点击按钮去触发信号时,会报如下的错误: QAxBase: Error calling IDispatch member GetStagePosition: Type mismatch in parameter 0
4、当我尝试用第二种方法去调用:
QVariant qvarX, qvarY, qvarZ, qvarT, qvarR, qvarM;
QVariantList args; args << qvarX << qvarY << qvarZ << qvarT << qvarR << qvarM;
m_axObject->dynamicCall("GetStagePosition(QVariant&, QVariant&, QVariant&, QVariant&, QVariant&, QVariant&)", args);
当我点击按钮去调用,还是报相同的错误: QAxBase: Error calling IDispatch member GetStagePosition: Type mismatch in parameter 0
我不太明白问题出在什么地方,非常感谢能够帮我解决这个bug。
|