2013-02-13 375 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);