您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

com 的 IUnknown 接口的了解

1.一切类的继承都是源于IUnknown 和CUnknown 。
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;   
  }   

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

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

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

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


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进