这是对上一个问题的跟进: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 = "";
我在网上搜索并看到了一个类似的错误,这些错误已在他们的错误跟踪器上报告。它似乎还没有修复:
Calling functions through dynamicCall() don't return values by QVariant
也是有人似乎有同样问题的帖子:
有人知道解决方案/解决方法吗?
编辑:
原始功能是SendCommand(LPCTSTR command,BSTR* ret)
。
将BSTR*
作为&QString
处理的方式可能存在问题吗?
答案 0 :(得分:3)
您可以使用此解决方案
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();
答案 1 :(得分:2)
通过查看documentation,您没有正确调用该函数。您正在传递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 );