COM学习系列(一)
进程内组件 进程外组件
直接指向组件程序的VTable
extern "C" _declspec(dllexport) int _stdcall MyFunction(int n);
可以按照函数的序号查找 在DEF文件中指名
也可以根据函数的名称查找
COM采用本地过程调用 和 远程过程调用
LPC RPC
LPC相当于RPC的一个优化实现
进程内组件效率低 但跨进程调用安全
全操作系统公用的信息仓库
实现COM库时必须同时定义出注册表的结构
HKEY_CLASSES_ROOT
自注册组件程序 非注册组件程序
只要进程内组件提供相应的入口函数
则RegSvr32 就可以完成注册或注销工作
支持自注册的进程外组件必须支持两个命令行参数 /RegServer 和 /UnregServer
调用COM库的函数进行组件对象的创建工作
CreateInstance
COM的创建函数根据注册表的信息并调用组件程序的入口函数创建组件
COM库在接到对象创建的指令后,它要调用进程内组件的DllGetClassObject函数
由该函数创建类厂对象 并返回类厂指针。COM库一旦有类厂的接口指针,他们就可以
通过类厂借口IClassFactory的成员函数CreateInstance创建相应的COM对象
在COM库中 有三个API函数可用于对象的创建 他们分别是 COGetClassObject,
CoCreateInstance,CoCreateInstanceEx 一般情况调用其中一个
1.CoInitialize 通常 一个进程对COM库只进行一次初始化
2.初始化完成 调用CoBuildVersion 获取COM库版本
3.COM库的终止函数 CoUninitalize