c++ - COM 事件通知

标签 c++ com

没有:

  • ATL
  • MFC

注意:

  • 客户端在与服务器不同的线程中执行

问题:

  • 一旦从 COM 对象收到事件通知,我如何控制客户端的行为>(服务器)?
  • 如何从客户端实现事件接口(interface)?

下图:

hresult = pis8->QueryInterface(
                __uuidof(IConnectionPointContainer),
            (void **) &pContainer);

//result handling omitted


hresult = pContainer->FindConnectionPoint(
                      __uuidof(IS8SimulationEvents),
                      &pConnection);

//result handling omitted

最佳答案

客户端实现事件接口(interface) (IS8SimulationEvents) 这可以在单独的组件中,也可以在客户端组件本身上。当组件触发事件时调用实现。

FindConnectionPoint 之后,客户端调用pConnection->Advise,传递IS8SimulationEvents 并接收“cookie”。 cookie 需要调用 Unadvise,它必须在清理期间调用以断开连接。

如果客户端运行在与服务器不同的线程中,则客户端需要运行消息循环来接收调用。

关于c++ - COM 事件通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/454316/

相关文章:

c++ - 逐行读取文件并将其存储在 vector 中,对其进行处理

c++ - 我能知道我的函数有多少个参数吗?

c++ - 我可以在C/C++中(在Linux上)将`a.out`文件转换为“可执行文件”吗?

c# - 如何将事件附加到动态对象或 COM 对象

c# - 从 .NET 附加到 COM 服务器中的事件时出现 E_ACCESSDENIED 异常

c# - 这个 .tlh 文件是否正确,如果不正确,我该如何生成正确的文件?

c++ - c++中不规则的文件写入性能

c++ - 为什么 boost::property_tree::write_json() 将整数值转换为字符串?这是不正确的。

c++ - 在 visual studio 2010 中编译 IDL 文件时无法生成必要的文件

windows - 为什么我的 COM 工厂在程序生命周期内从未被释放?