0

我正在尝试在我的程序中使用 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);
4

2 回答 2

1

使用该generateDocumentation()功能解决了这个问题。

我在另一个应用程序中使用了这个 ActiveX 控件,但它是一个 MFC 应用程序。

似乎我所指的函数名称(在由 VS 创建的机器生成的 IDispatch 包装器类中)与 Qt 列出的函数名称不同。

即 put_ChannelType 实际上是 SetChannelType...

也许这只是一个版本问题?

无论如何,重要的部分是知道它generateDocumentation()可以列出你可以调用的所有函数dynamicCall

于 2013-02-14T19:30:42.570 回答
0

可以吗?mAX->dynamicCall("put_ChannelType(const QVariant &)", (long)2);

于 2013-02-15T01:51:37.037 回答