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

爱程序 不爱bug 爱生活 不爱黑眼圈 我和你们一样 我和你们不一样 我不是凡客 我要做geek
原文地址:https://www.cnblogs.com/yifi/p/6442140.html