使用DispEventAdvise注册多个对象的事件

时间:2014-01-13 16:40:22

标签: c++ com idispatch

我有一个继承自“DispEventAdvise”的类(对于outlook2010,但它并不重要):

class item_2010_event_handler : 
public IDispEventSimpleImpl<IDC_OUTLOOK_ITEM_2010_EVENTS, 
                            item_2010_event_handler, 
                            &outlook_item_2010_ev_id>

现在,我想注册item_2010_event_handler的单个实例以从多个对象中获取事件,因此我多次调用DispEventAdvise()(每个对象一次),但是从第二次调用DispEventAdvise()后,我得到“未知”错误“函数异常。

是否可能不支持?如果没有,为什么不呢???

如果有可能,我缺少什么(显然,如果需要,我会添加更多代码......)?

1 个答案:

答案 0 :(得分:0)

您继承的IDispEventSimpleImpl的每个“副本”都会保留一个所谓的“cookie”,这是您稍后在需要取消/断开事件时提供给连接点的值。话虽如此,IDispEventSimpleImpl类(名称中的“简单”字样)仅支持一个连接。

您的选择是:

  1. 重写IDispEventSimpleImpl类,以便替换类可以连接到正确管理连接的多个点
  2. 为每个连接创建一个连接点接收器类的辅助实例,然后将呼叫转发回所有者,使其收集来自多个来源的呼叫 - 建议
  3. 从不同的IDispEventSimpleImpl基础继承多次以支持更多(固定数量 - 缺乏灵活性,适用于每个源类型的多个连接)单个实例上的连接