1

それなし:

  • ATL
  • MFC

ノート:

  • プレーンC++
  • アウトプロセスCOM オブジェクト/サーバー
  • 事前定義された TLB ファイル

質問:

  • COMオブジェクトがシンクにイベント を通知できるように、発信インターフェイスを実装する方法は?
  • 受け取ったら、イベントを適切に処理する方法は?

以下は、実装したいイベント関数です-TLBファイルから:

inline HRESULT IS8SimulationEvents::S8SimulationEndRun ( ) {
    HRESULT _result = 0;
    _com_dispatch_method(this, 0x2, DISPATCH_METHOD, VT_ERROR, (void*)&_result, NULL);
    return _result;
}

よろしく

4

1 に答える 1

2

ソース インターフェイスを COM サーバー クラスに実装します。ATL を使用していない場合は、IConnectionPointcontainer を実装する必要があります。

クライアント クラスで、以下に示すように COM サーバーを呼び出します。1. FindConnectionPointContainer を呼び出します。 2. FindConnectionPoint を呼び出します。 3. ステップ 2 から返されたインターフェイス ポインターで Advise を呼び出します。シンク オブジェクトの IUnknown ポインターを提供する必要があります。Advise は、una​​dvise を呼び出すときに使用できる Cookie を返します。

イベントを処理するには、IDispatch の Invoke メソッドを使用してクライアント側の呼び出しを解決する 2 つの方法があります。もう 1 つは、サーバー自体が特定の Sink メソッドを呼び出すことです。どちらのメソッドも、アドバイス中に取得する IUnknown ポインターを使用します。

于 2009-01-18T11:44:06.163 に答える