com 的 IUnknown 接口的了解

1.所有的com接口都需要继承iunknown。
typedef CComPtr< IUnknown > IUnknownPtr;
typedef CComPtr< CUnknown > CUnknownPtr;
IUnknown 是com 的接口
C++实现COM技术规范是通过一个名为IUnKnown的抽象类,即包含纯虚函数的类,这样的类即称为接口。
该类只有三个函数:QueryInterface、AddRef、Release,且都是纯虚函数,一个可执行文件的类只要继承了IUnKnown接口,
则此执行文件就是一个组件,能被包容或聚合到其他应用中。具体可参看COM书籍:《COM技术内幕》
IUnknown是所有接口的基础,他负责两项工作:   
 IUnknown::QueryInterface负责得到该组件的其他接口的指针   
 IUnknown::AddRef/Release负责管理该组件的生存期,但有人使用该组件时,保证该组件不会被意外删除;再没人使用该组件时,保证该组件被自动删除  

一句话:COM是接口(组件)的集合,接口是方法和属性的集合。   
  要了解COM,就得先了解IUnknown接口,IUnknown接口的C++形式的定义如下:   
  interface   IUnknown   
  {   
          virtual   HRESULT   _stdcall   QueryInterface([in]REFIID   iid,[out]void   *   *   ppv)=0;   
          virtual   ULONG   _stdcall   AddRef(void)=0;   
          virtual   ULONG   _stdcall   Release(void)=0;   
  }   

因为所有的com接口都继承iunknown,每个接口的vtbl前3个函数都是QueryInterface、AddRef、Release。

 

 

组件组合到应用中有什么办法?
有2个办法:包容和聚合。

先了解两个概念:外部组件,即包容或聚合其他组件的组件;内部组件,即被其他组件包容或聚合的组件。
比如,A组件要引用C组件的功能,则A就需要包容或聚合C组件,那么A组件就称为外部组件,C组件称为内部组件。

在C++里,实现包容和聚合的难度是不一样的,总的来讲,聚合实现比包容要更复杂。
包容的解决方案是,外部组件的接口封装调用内部组件的接口暴露给客户使用,暴露的只是外部组件接口;
而聚合的方案是,内部组件的接口是直接暴露给客户使用的,但对于客户来说,所有的接口都是来自外部组件。
所以,聚合的实现就必须做到通过外部组件和内部组件的任意接口可以查询到其他任意接口。

COM 组件就是一组接口的集合,实现了 IDispath 接口的 COM 组件叫做 自动化组件。
在自动化组件的基础上,在实现规定的接口就称为 ActiveX 组件,Ocx 是 Activex 的文件载体

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值