Qt ActiveX dynamicCall возвращаемое значение всегда пусто

Это продолжение предыдущего вопроса: 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 ?

2

Решение

Вы можете использовать это решение

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

Другие решения

Смотря на документация, Вы не вызываете функцию правильно. Вы проходите в 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 );
2

По вопросам рекламы [email protected]