Qt ActiveX dynamicCall返回值始终为空
Qt ActiveX dynamicCall return value always empty
这是上一个问题的后续问题: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 );
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 方法错误"not all control paths return a value"和方法不返回值
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 对fread的返回值感到困惑
- 程序不向函数返回值
- 如何在另一个函数中使用返回值作为参数?
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 使用 std::p air 进行返回值优化
- Qt ActiveX dynamicCall返回值始终为空