2

这是对上一个问题的跟进: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

4

2 回答 2

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();
于 2013-05-11T12:13:50.590 回答
2

通过查看文档,您没有正确调用该函数。您正在传入 a QString,但该函数需要 a 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 );
于 2013-02-18T23:24:59.420 回答