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 に答える