2009-01-18 176 views
1

沒有:接收COM事件

  • 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; 
} 

問候

回答

2

實現COM服務器類的源接口。 如果您不使用ATL,您應該實現IConnectionPointcontainer。

在客戶端類中調用COM服務器,如下所述。 1.調用FindConnectionPointContainer 2.調用FindConnectionPoint 3.對從第2步返回的接口指針的Call Advise,我們應該提供sink對象的IUnknown指針。建議返回一個cookie,我們可以在調用unadvise時使用它。

要處理事件,您可以使用兩種方法 一個使用IDispatch的Invoke方法來解析客戶端的呼叫 其他服務器本身調用特定的Sink方法。這兩個方法都使用它在建議時獲取的IUnknown指針。

+0

如何確認COM對象已有源接口?我正在使用預定義的TLB文件。 – Aaron 2009-01-18 11:47:32