Qt ActiveX dynamicCall返回值始终为空

Qt ActiveX dynamicCall return value always empty

本文关键字:返回值 ActiveX dynamicCall Qt      更新时间:2023-10-16

这是上一个问题的后续问题:Qt ActiveX

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

QAxWidget* mAX = new QAxWidget();
mAX->setControl("{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}");

我知道有一个类似下面的函数(使用getDocumentation()):

SendCommand(QString input, QString& output)

但当我尝试执行它时:

QString returString;
mAX->dynamicCall("SendCommand(QString,QString&)","something",returnString);

我总是得到:

returString = "";

我在网上搜索了一下,发现了一个类似的错误,在他们的错误跟踪器上报告了这个错误。它似乎还没有修复:

通过dynamicCall()调用函数不会通过QVariant 返回值

还有一个帖子,有人似乎有同样的问题:

QAxObject和dynamicCall

有人知道解决方案/变通办法吗?

编辑:

原始函数为SendCommand(LPCTSTR command,BSTR* ret)

也许BSTR*作为&QString处理的方式有问题?

您可以使用此解决方案

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,但函数需要一个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 );