摘抄总结于《COM 原理与实现》
COM 标准包括规范,实现
规范:定义了组件和组件之间通讯机制,这些规范不依赖于任何特定的语言和操作系统
实现:COM 库
1.2.1对象与接口
COM是面向对象的软件模型——>对用户不可见
每个COM 中每一个对象用128位GUID 标识称为 CLSID
接口——> IUnknown (接口是一组逻辑上相关的函数的集合,其函数也被称为接口成员函数;对象通过接口成员函数为客户提供各种形式的服务;客户请求服务时,只能通过接口进行(对象本身对客户来说是不可见的)。)
每个接口都是由一个128位的GUID标识。客户通过GUID活动接口的指针,在通过接口指针调用其相应的成员函数。
客户通过CLSID 成功创建对象后,得到指向对象某个接口指针,然后可以得到其他所有接口的指针
1.2.2客户/服务器模型
1、稳定性
2、科扩展性
3、提高性能
4、降低流量
5、事务机制(数据备份)
1.2.3 COM 库
Windows 下 库以.dll文件形式存在,主要包含以下内容
1、 少量API函数;在客户端试一下创建函数,服务端,以下对对象的访问支持。
2、 COM 通过注册表查找本地服务EXE程序,将程序名转为CLSID等
3、 标准的内存控制方法。
COM库在操作系统层上实现,一个操作系统只有一个COM 库实现
1.3 COM 特性
1.3.1 语言无关性
1.3.2 进程透明特性
COM所提供的服务组件对象在实现时有两种 进程模型:进程内对象,进程外对象。
1.3.3可重用性
2 COM对象和接口
2.1 COM 对象
2.1.1
COM 对象的标识-CLSID
例子{00024500-0000-0000-C000-000000000046}
01.typedef struct .GUID {
02.DWORD Data1; //随机数
03.WORD Data2; // 和时间相关
04.WORD Data3; // 和时间相关
05.BYTE Data4[8]; //和网卡MAC相关
06.} GUID;
07.
08.typedef GUIDCLSID; // 组件ID
09.typedef GUIDIID; // 接口ID
COM库为我们提供了以下API 函数可以产生GUID:
HRESULT CoCreatedGuid(GUID *pguid);
2.1.2
1、封装特性:COM对象中,数据是完全封装在对象内部的,外部不可能直接访问对象的数据属性(不同模块,不同进程,不同机器)
2.可重用性:COM 对象的可重用性表现在COM 对象的包容和聚合
2.2COM 接口
2.2.2接口定义和标识
2.2.6接口的一些特点
1、二进制特性
2、接口不变性
2.3IUnknown接口
IUnknown 接口提供了两个非常重要的特性:生存期控制,接口查询。
2.3.1引用计数(AddRef 和Release)
2.3.2实现引用计数 三种(COM 组件、COM对象、COM接口)
2.3.7COM 对象和接口图
3、COM 的实现
进程内组件和进程外组件
进程内组件 dll 与软件同一个进程内,效率高
进程外组件
3.2 注册表管理COM 对象
3.3.1 类厂