COM学习笔记三--聚合

在开发过程中,当一个COM B需要调用另一个COM A时,这时有两种方法来实现该操作:包含,聚合。前一种直接保存A的对象指针,所有的操作均在B中进行封装,涉及到A操作方法,利用A对象指针完成调用;而聚合在初始化期间保存对象A的指针,在运行过程中,所有涉及到A操作的方法无需封装,直接调用A的方法,将对象A的指针直接暴露给用户,让用户自己调用。

包含则只暴露给用户B对象的指针,聚合同时暴露给用户对象A和B的两个指针,由于COM文档规定,同一个COM只能获取一个指针,那么A和B就需要满足指针的一致性,这样在实现过程中就需要针对对象A分别做聚合与非聚合之分,当聚合时,接口之间的查询必须过渡到对象B,让对象B去负责接口查询,非聚合则保持不变;在涉及到接口的计数操作时,聚合操作均需要对象B去实现,对象A则无需处理。在析构函数时,由于对象A包含对象B的指针,对象B包含对象A的指针,在对象B中,对象A的析构在B析构函数中完成,在对象A中,所有的增加,自减引用计数均由对象B负责,通过调用对象B的对象AddRef,Release方法完成。

总而言之,聚合对象A需要将所有操作交由对象B完成,对象B中只需负责对象A的释放。那么对象A中需要实现两种操作:聚合与非聚合的情形。判断聚合与否,通过CoCreateInstance方法中的第二个参数来确定,传递对象B的指针保存在对象A中。


具体源码见这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值