C++ Qt ActiveX dynamicCall返回值始终为空

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&

这是前一个问题的后续问题:

我试图在我的程序中使用ActiveX控件

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();