我有一个继承自“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() 时,我得到“未知错误”函数异常。
有没有可能不支持?如果不是,为什么不呢???
如果可能的话,我错过了什么(显然,如果需要,我会添加更多代码...)?
最佳答案
您继承的 IDispEventSimpleImpl
的每个“拷贝”都会保留一个所谓的“cookie”,当您需要取消通知/断开事件连接时,您会在稍后提供回连接点的值。话虽如此,IDispEventSimpleImpl
类(注意名称中的“简单”一词)仅支持一个连接。
您的选择是:
- 重写
IDispEventSimpleImpl
类,以便替换类可以连接到多个点,正确管理连接 - 为每个连接创建一个连接点接收器类的帮助程序实例,然后将调用转发回所有者,使其从多个来源收集调用 - 推荐
- 多次从不同的
IDispEventSimpleImpl
基础继承,以支持单个实例上的更多连接(尽管数量固定 - 缺乏灵 active ,适用于每个源类型一个连接的多个连接)
关于c++ - 使用 DispEventAdvise 注册多个对象的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21096578/