COM技术内幕

第1章 组件

1、COM,即组件对象模型,是关于如何建立组件以及如何通过组件建构应用程序的一个规范。
2、组件的优点:应用程序可随时间的流逝而发展变化;定制应用程序;组件库;分布式组件。
3、对组件的需求:组件必须动态连接;必须隐藏其内部实现细节。
4、COM组件是以Win32动态链接库(DLLs)或可执行文件(EXEs)的形式发布的可执行代码组成

的。遵循COM规范编写的组件将能够满足对组件家够的所有需求。COM组件是动态链接的,COM使

用DLL将组件动态链接起来。对于COM组件的封装是很容易的。COM组件按照一种标准的方式来宣

布他们的存在。COM组件是一种给其他应用程序提供面向对象的API或服务的极好方法。
5、COM并不是一种计算机语言。
6、将COM同DLL相提并论是不合适的。实际上COM使用了DLL来给组件提供动态链接的能力。
7、COM并不是像Win32API那样的函数集,它更主要的是一种编写能够按面向对象API形式提供服

务的组件的方法。
8、COM并不是类似于MFC这样的C++类库。COM给开发人员提供的是一种开发与语言无关的组件库

的方法,但COM本身并没有提供任何实现。
9、COM具有一个被称作是COM库的API,它提供的是对所有客户及组件都非常有用的组件管理服务

第2章 接口

1、在COM中接口就是一切。
(1)接口可以保护系统免首外界变化的影响。
(2)接口可以使客户用同样的方式来处理不同的组件。
2、(1)COM接口在C++中是用纯抽象基类实现的。
   (2)一个COM组件可以提供多个接口。
   (3)一个C++类可以使用多继承来实现一个可以提供多个接口的组件。
3、类并非组件。
4、接口并非总是继承的。对接口的继承只不过是一种实现细节而已。除了可以使用一个类来实

现几个不同的接口外,还可以用单个的类来实现每一个接口再使用指向这些类的指针。
5、组件可以支持任意数目的接口。为支持多重接口,可以使用多重继承。支持多重接口的组件

可以被看作是接口的集合。
6、COM接口的不变性、多态以及接口继承。
(1)一旦公布了一个接口,那么它将永远保持不变。当对组件进行升级时,一般不会修改已有

的接口,而是加入一些新的接口。
(2)多态指的是可以按同一种方式来处理不同的对象。
7、虚拟函数表(vtbl):包含一组指向虚拟函数实现的指针。
定义一个纯抽象基类也就是定义了相应的内存结构。但此内存只是在派生类中实现此抽象基类时

才会被分配。当派生类继承一个抽象基类时,它将继承此内存结构。
8、在COM中,对一个组件的访问只能通过函数完成,而绝不能直接通过变量。

9、接口的真正的威力在于继承此接口的所有类均可以被客户按同一方式进行处理。



第3章 QueryInterface函数


1、接口查询:
客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成

的。这个接口就是IUnknown。
IUnknown接口的定义包含在Win32 SDK中的UNKNOWN.H头文件中。
interface IUnknown
{
    virtual HRESULT _stdcall QueryInterface(const IID& iid,void **ppv) = 0;
virtual ULONG _stdcall AddRef() = 0;
    virtual ULONG _stdcall Release() = 0;
}
在IUnknown中定义了一个名为QueryInterface的函数。客户可以调用QueryInterface来决定组件

是否支持某个特定的接口。
2、所有的COM接口都需要继承IUnknown。
3、由于所有的COM接口都继承了IUnknown,每个接口的vtbl中的前三个函数都是

QueryInterface,AddRef和Release。若某个接口的vtbl中的前三个函数不是这三个,那么

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值