我正在尝试在我的程序中使用 ActiveX 控件。
QAxWidget* mAX = new QAxWidget();
mAX->setControl("{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}");
我知道有一个函数:
put_ChannelType(long newValue)
但是当我尝试执行它时:
mAX->dynamicCall("put_ChannelType(long)",2);
mAX->dynamicCall("put_ChannelType(int)",2);
mAX->dynamicCall("put_ChannelType(long)",QVariant(2));
mAX->dynamicCall("put_ChannelType(int)",QVariant(2));
我得到:
QAxBase: Error calling IDispatch member put_ChannelType: Bad parameter count
知道出了什么问题吗?
编辑:
奇怪的是如果我打电话
mAX->dynamicCall("put_ChannelType()");
我没有收到任何错误信息...
编辑 2:
这也失败了(正如康斯坦丁建议的那样)
QList<QVariant> varlist;
varlist << (int)1;
mAX->dynamicCall("put_ChannelType(int)",varlist);
最佳答案
使用 generateDocumentation()
函数解决了这个问题。
我在另一个应用程序中使用了这个 ActiveX 控件,但是是一个 MFC 应用程序。
我指的函数名称(在 VS 创建的机器生成的 IDispatch 包装器类中)似乎与 Qt 列出的函数名称不同。
即put_ChannelType 其实就是SetChannelType...
也许这只是版本问题?
无论如何,重要的是知道 generateDocumentation()
可以列出您可以使用 dynamicCall
调用的所有函数。
关于c++ - Qt ActiveX 动态调用 : bad parameter count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14859552/