【问题标题】:Qt ActiveX dynamicCall: bad parameter countQt ActiveX dynamicCall:错误的参数计数
【发布时间】:2013-02-15 09:51:37
【问题描述】:

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

【问题讨论】:

  • 从不同线程错误地调用事件/插槽时出现此错误。你在使用 QThreads 吗?
  • 不,我在 QMainWindow 构造函数中调用它
  • qt-project.org/forums/viewthread/4842 也许,改为传递QList&lt;QVariant&gt; vars
  • 是的,我已经看到并尝试过,失败:/

标签: c++ qt activex


【解决方案1】:

使用generateDocumentation() 函数解决了这个问题。

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

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

即put_ChannelType 其实就是 SetChannelType...

也许这只是版本问题?

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 2014-09-01
      • 1970-01-01
      • 2012-11-30
      相关资源
      最近更新 更多