C++ 接收COM事件

C++ 接收COM事件,c++,com,event-handling,C++,Com,Event Handling,没有: ATL MFC 注: 普通C++ 进程外COM对象/服务器 预定义TLB文件 问题: 如何实现传出接口,以便COM对象可以通知接收器事件? 一旦收到,如何适当处理事件? 下面是我想实现的事件函数-来自TLB文件: 在COM服务器类中实现源接口。 如果不使用ATL,则应实现IConnectionPointcontainer 在客户机类中,调用COM服务器,如下所述。 1.调用FindConnectionPointContainer 2.呼叫查找连接点 3.在步骤2返回的接口

没有:

  • ATL
  • MFC
注:

  • 普通C++
  • 进程外COM对象/服务器
  • 预定义TLB文件
问题:

  • 如何实现传出接口,以便COM对象可以通知接收器事件?
  • 一旦收到,如何适当处理事件?
下面是我想实现的事件函数-来自TLB文件:


在COM服务器类中实现源接口。 如果不使用ATL,则应实现IConnectionPointcontainer

在客户机类中,调用COM服务器,如下所述。 1.调用FindConnectionPointContainer 2.呼叫查找连接点 3.在步骤2返回的接口指针上调用advice,我们应该提供sink对象的IUnknown指针。Advice返回一个cookie,我们可以在调用unadvise时使用它

要处理事件,可以采用两种方法 一种是使用IDispatch的Invoke方法来解析客户端中的调用
另一个是服务器本身调用特定的接收器方法。这两个方法都使用它在通知时获得的IUnknown指针。

如何确认COM对象已经有源接口?我正在使用一个预定义的TLB文件。找到了“dispinterface IS8SimulationEvents”-helpstring(“S8Simulation对象的事件接口”)。是这样吗?通常带有“事件”的接口都是接收器接口,意思是“应该由客户端实现”,而这个接口上面的接口是源接口OK,所以我将尝试从客户端实现IS8SimulationEvents-接收器接口。抱歉,请原谅,我仍然不明白:接口是8Simulation-在上面(在OLEVIEW中)OLEVIEW是Microsoft的应用程序,用于查看所有COM组件,它们的接口在您的计算机中注册。如果您的COM服务器已注册,则应在OleView中列出。
inline HRESULT IS8SimulationEvents::S8SimulationEndRun ( ) {
    HRESULT _result = 0;
    _com_dispatch_method(this, 0x2, DISPATCH_METHOD, VT_ERROR, (void*)&_result, NULL);
    return _result;
}