xiaolin 发表于 2023-8-15 13:27:11

Qt调用ocx报错

本帖最后由 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)

使用信号去调用:
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。
页: [1]
查看完整版本: Qt调用ocx报错