2016-04-05 9 views
1

idlファイルに続くような、IDispatch *タイプのパラメータを持つActiveXイベントを処理するためにActiveQtライブラリを使用しようとしています。QAxObjectイベントとIDispatchタイプのパラメータを使用して接続する*

// ... 
library RecognitionClientLib 
{ 
    importlib("stdole2.tlb"); 
    [ 
     uuid(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX), 
     helpstring("_IIFactoryEvents Interface") 
    ] 
    dispinterface _IIRecognizerFactoryEvents 
    { 
     properties: 
     methods: 
      [id(1), helpstring("method OnError")] void OnError(
       [in] LONG ilOperationCode, 
       [in] BSTR iszDescription 
       ); 
      [id(2), helpstring("method OnResult")] void OnResult(
       [in] IDispatch* ilpSource, 
       [in] LONG ilOperationCode 
       ); 
    }; 
    [ 
     uuid(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX), 
     control, 
     helpstring("IFactory Class") 
    ] 
// ... 

私はdumpcpp.exeを使用し、オブジェクトのヘッダーファイルとcppファイルを生成しました。ヘッダ・ファイルに示されるように 生成されたファイルは、イベントの生成をスキップ:

// skipping event interface _IIFactoryEvents 

文書によれば、のIDispatch *引数は「QAxBase :: asVariant()」に変換されなければなりません。したがって、私は、次のようにイベントを接続しようとした:私はONERRORの信号ではなくはonResultの接続を接続問題がない

ClientLib::IFactory* lpFactory(new ClientLib::IFactory()); 
bool lbOk(connect(
    lpFactory, 
    SIGNAL(OnError(
     int, 
     const QString& 
     )), 
    SLOT(onError(
      int, 
      const QString& 
     )) 
    )); 
assert(lbOk); 
lbOk = connect(
    lpFactory, 
    SIGNAL(OnResult(
     QVariant, 
     int 
     )), 
    SLOT(onResult(
     QVariant, 
     int 
     )) 
    ); 
assert(lbOk); 

オブジェクトで失敗しました::接続しない:そのような信号 ClientLibを:: IFactory :: OnResult(QAxObject *、int)

私はIDispatch *型の引数にどのようなパラメータ型を使用する必要がありますか?

多くのありがとうございます!

+0

Nitpick:接続するために渡すシグナル/スロットのシグネチャや空白からconst参照を削除する必要があります。これはQtがシグネチャを正規化する必要がないため、ランタイムを少し節約します。したがって、bool lbOk = connect(lpFactory、SIGNAL(OnError(int、QString))、SLOT(onError(int、QString))); –

+0

アドバイスをいただきありがとうございます。私はそれらを変更します。 :) – crackpot

答えて

1

IDispatch *タイプの引数 には、どのパラメータタイプを使用する必要がありますか? QAxObject*

IDispatch*マップ:http://doc.qt.io/qt-5/qaxbase.html

+0

あなたの精巧な答えをありがとう。しかし、私の質問は、私が使用すべき信号の署名であった。私は上記の回答から答えを理解することはできません。 : 私は、 "IDispatch *"の型であるべきだと思っていましたが、アサルトは成功しました。ありがとう。 – crackpot

1

私は、ドキュメントはそれがためにQAxBase :: asVariant()と言ったにも関わらず、パラメータの型をそのままのIDispatch *をする必要がありますを発見したタイプのパラメータでIDispatch *

+0

よくできました。バグトラッカー。 –

関連する問題