2009-01-18 124 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