COM Objects and Interfaces
一个对象实现一个接口,他的意思就是该对象使用代码实现了接口的每个方法
并且为这些函数通向com库提供了com的二进制指针。然后com使这些函数运行在
请求了一个指向该接口的任何客户端。
Interfaces and Interface Implementations
COM 在接口的定义和实现上有根本的差别。一个接口实际上是由一组定义了用法的相
联系的函数原型组成,只是他不能够被实现。这些函数原型就相当于C++中含有纯虚拟函数的基类。一个接口定义制定了接口的成员函数、调用方法、返回类型、他们的参数的数量和类型,这些函数要干什么。但是这里并没有与接口实现相关的东西。一个接口的实现就是程序员在一个借口定义上提供的执行相关动作的代码。
一个接口的实现就是程序员在一个借口定义上提供的执行相关动作的代码。客户调用完全是决定于接口的定义。
Interface Pointers and Interfaces
接口实现的一个实例,实际上就是一个指向一组方法的指针,即是指指向一个接口的函数表,该函数表引用了该接口所有方法的实现。
每个接口,是一个固定的一组方法的集合,在运行时通过globally unique interface identifier (IID) 来定位。这里,IID是com支持的globally unique identifier (GUID)的特殊的实例。这样做就不会产生单一系统上相同名字、接口的多个版本的COM之间的冲突了。
一个COM接口与C++类是不一样的;
一个COM接口不是一个对象——他只是简单的关联一组函数,是客户和程序之间通信的二进制标准。只要他提供了指向借口方法的指针,这个对象就可以用任何语言来实现他。;
COM接口十强类型的——每个接口有他自己的借口标识符;
· COM接口的不变性——你不能够用老版本的接口标识符定义新的版本,接口的IID定义的接口合同是明确的、唯一的。
IUnknown and Interface Inheritance
继承在COM 里并不意味着代码的重用。因为接口没有实现关联,借口继承并意味着代码继承。他的意思仅仅是,一个接口同一个合同关联,就像C++的纯虚拟基类的创建和修改样,可以添加方法或者更进一步的加强方法的使用。在COM里没有选择性继承。如果一个接口由另一个接口继承的话,他就包含了另一个接口定义的所有的方法。
Using and Implementing IUnknown
COM 为实现和使用对象和对象的内部通信提供了一个丰富的标准集合。对IUnknown接口的实现和使用的细节,请参见下面主题:QueryInterface: Navigating in an Object。
Rules for Implementing QueryInterface
管理实现一个COM对象的IUnknown::QueryInterface方法的三个主要规则:
1.对象必须要有一个标识符;
2.一个对象实例的接口集合必须是静态的(static);
3.在对象中从任何一个其他的接口查询此接口都应该成功。
通过引用计数来管理对象的生命周期
使用 AddRef() //增加引用
Realase() //减少引用