2013-02-13 44 views
0

我想在我的程序中使用ActiveX控件。Qt ActiveX dynamicCall:错误的参数数量

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); 
+0

我错误地调用不同线程的事件/插槽时出现此错误。你在使用QThreads吗? – Constantin 2013-02-13 18:06:12

+0

不,我打电话给这个在QMainWindow的构造函数 – Smash 2013-02-13 18:28:44

+0

http://qt-project.org/forums/viewthread/4842也许,传递一个'QList 瓦尔斯'而不是? – Constantin 2013-02-13 18:32:11

回答

1

使用generateDocumentation()功能解决此问题。

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

似乎我所指的函数名称(它们是由VS创建的机器生成的IDispatch包装类)与列出的Qt不一样。

即put_ChannelType实际上是SetChannelType ...

也许这仅仅是一个版本的问题?

无论如何,重要的部分是知道generateDocumentation()可以列出你可以用dynamicCall打电话的所有功能。

0

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