1. 简单来说,COM是一类系统应用程序接口(API)。
允许你的应用程序访问其他应用程(EXE)或动态链接库(DLL)中的数据和函数。它事实上提供了一种C/S标准。
COM是Component Object Model的简称,其基本思想是试图像搭建计算机硬件设备那样搭建软件。
(1) 调用 COM API 接口::CoCreateInstance()。
(2) 在系统注册表中记录
(3) 装载DLL,或者通过远程过程调用API启动相应的EXE文件。
(4) 在创建对象后,::CoCreateInstance()返回该对象的指针。
(5) 使用通过指针
(6) 消灭则引用计数-1,为0则COM真的消灭对象。
(7) 释放资源,如DLL
3.什么是GUID
开放软件组织OSF提出了统一唯一标识UUID, GUID是微软公司对此的解释。
一个GUID是一个128位长的数,从理论上说在整个空间和时间维上它是唯一的。
为了保证它在空间维上唯一,GUID中有一些特定的位来记录它是由哪个机器产生的,
它通常是该机器的网卡地址,如果这台机器上没有网卡,会使用另一个常数。
为了保证在时间维上唯一,GUID包含了一个时间戳,用来记录它生成的时间。
这个时间戳的范围是从1490年开始到生成该GUID时的时间为止,以分钟为单位。
另外,GUID还包含了一个随机产生数。 GUID的格式为:
rrrrrrrr-tttt-tttt-oooo-aa-aa-aa-aa-aa-aa
其中:
rrrrrrrr: 32位长的随机数
tttt-tttt: 时间戳,其中低16位字在前;
oooo: 与机器重启次数有关
aa-aa-aa-aa-aa-aa: 一个6字节长的字符串,一般是机器的网卡地址
4. 创建一个COM对象时需要两个ID
(1) 类ID -- CLSID, 用来表示DLL或EXE文件
(2) 接口ID – IID, 用来指示所要创建的对象的类。
5.系统注册表
(1)COM的信息可以在系统注册表中的HKEY_CLASSES_ROOT键下找到,
这个键其实指向的是HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES键下的内容。
大部分是扩展名和实际应用程序的对应,也有:
AppId
CLSID—128 bits Key
Interface IID -- 128 bits Key
6.利用com组件进行通信
7. COM术语
(1) 把COM DLL称为,在进程中。
(2) 把COM EXE称为,在进程外。
(3) 把本地系统执行的COM EXE称为, 本地服务器
(4) 把在别的系统里执行的COM EXE称为, 远程服务器 ---- DCOM,分布式COM技术。
8.怎样消灭COM对象
(1)引用计数,目的是让对象能够自己维护自己,在通知销毁时,判断是不是该释放资源。
(2)但是如果调用进程终止,COM也会销毁被该进程调用的COM对象。
9.怎样用C++写一个 COM类
(1)对于COM类,要把成员定义在一个叫做 ---- 接口定义语言 IDL,的地方。
(2) MyInterface的IDL编译后产生:
MyInterface.h
MyInterface_i.c
MyInterface_p.c
dlldata.c
MyInterface.tlb
10.使用MFC或者ATL来创建COM类
11.什么是服务控制器