C++ Qt ActiveX dynamicCall返回值始终为空
这是前一个问题的后续问题: 我试图在我的程序中使用ActiveX控件C++ Qt ActiveX dynamicCall返回值始终为空,c++,qt,activex,qstring,bstr,C++,Qt,Activex,Qstring,Bstr,这是前一个问题的后续问题: 我试图在我的程序中使用ActiveX控件 QAxWidget* mAX = new QAxWidget(); mAX->setControl("{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"); 我知道有一个类似下面的函数(用于getDocumentation()): 但当我尝试执行它时: QString returString; mAX->dynamicCall("SendCommand(QString,QString&
QAxWidget* mAX = new QAxWidget();
mAX->setControl("{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}");
我知道有一个类似下面的函数(用于getDocumentation()
):
但当我尝试执行它时:
QString returString;
mAX->dynamicCall("SendCommand(QString,QString&)","something",returnString);
我总是得到:
returString = "";
我在网上搜索,发现了一个类似的bug,在他们的bug追踪器上报告了这个bug。它似乎还没有固定下来:
还有一个帖子,有人似乎也有同样的问题:
有人知道解决方案/解决方法吗
编辑:
原始函数是SendCommand(LPCTSTR命令,BSTR*ret)
可能是将BSTR*
作为&QString
处理的方式有问题?从中可以看出,您没有正确调用该函数。您正在传入一个QString
,但函数接受一个QVariant
。由于QVariant
没有显式构造函数(根据设计),因此会创建一个临时QVariant并将其传递给dynamicCall
。因此,returnValue
不会得到更新
QVariant dynamicCall( const char * function, const QVariant & var1 = QVariant(), ...
, const QVariant & var8 = QVariant() )
我认为当你使用QVariant时,一切都会正常工作
QVariant returnValue;
mAX->dynamicCall("SendCommand(QString,QString&)", "something", returnValue );
您可以使用此解决方案
QString strRetVal;
QVariant returnValue("");
QVariant param1("something");
QList<QVariant> inplist;
inplist<<param1;
inplist<<returnValue;
mAX->dynamicCall("SendCommand(QString,QString&)",inplist );
strRetVal=inplist.at(1).toString();
QString stretval;
QVariant返回值(“”);
q1(“某物”);
QList输入列表;
谢谢你的建议,但它不起作用。我已经试过了。为什么要将参数打包到inplist中并解包呢?我看到它工作得更好,但我不明白为什么。我尝试了上面的@thomas solution,但返回字符串值没有设置。当值打包到inplist中时,dynamicCall可以设置QString值,但不能设置QStringList值。QStringList值仍然没有设置,我得到一个错误消息“QAxBase:调用IDispatch成员GetPorts时出错:未知错误”
QString strRetVal;
QVariant returnValue("");
QVariant param1("something");
QList<QVariant> inplist;
inplist<<param1;
inplist<<returnValue;
mAX->dynamicCall("SendCommand(QString,QString&)",inplist );
strRetVal=inplist.at(1).toString();