初识统一事件模型之COM连接点

本文介绍了如何在VC++中使用COM连接点来实现事件处理,通过__event、__interface、__hook等关键字简化了Native、COM和Managed事件的处理。示例展示了如何定义事件源、触发事件以及作为事件接收者进行事件订阅,强调了event_source(com)和event_receiver(com)的作用。文章还提到了使用attribute编写的COM组件,并提醒在使用#import时注意embedded_idl参数的影响。
摘要由CSDN通过智能技术生成
学习C#的时候,最喜欢的就是event关键字,因为事件处理变得很轻松。以往在C++里,我们一般是使用回调函数或者虚函数(接口),虽然也挺方便,但是如果有多个事件接收者就比较麻烦了,而且每个人实现的回调方式都不一样。在COM编程模型里的连接点也很好,允许多个事件接收者,甚至利用COM的机制跨进程回调通知,可惜实现太负责,调用也麻烦。最好还是像C#的event关键字,清晰明了。

在尝试使用Attribute编写COM组件的时候,发现原来微软在VC++里增加很多关键字,用以简化和统一事件模型。这样使用同样的语法,就可以同时处理Native,COM和Managed的事件!

为了利用VC++的这个新特性(好像2000年就出来了,不算新啦,见笑见笑),今天郁闷了一天,现在终于搞定了,总结一下。

事件的定义和触发

__interface _IMyEventSink
{
    HRESULT SomethingHappened();
};

[coclass,event_source(com)]    //关键是event_source(com)
class MySourceObject
{
  __event __interface _IMyEventSink;    //跟C#的语法一样

  void DoSomething()
  {
     __raise SomethingHappened();    //直接调用事件接口里的方法。
  }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值