COM编程入门,十分浅显易懂
走马观花看COM服务器——描述COM服务器的基本要求 描述IUnknown之方法的目的 AddRef() 和 Release() 一个定制接口的例子——例子代码示范了上述概念 来测试COM服务器
走马观花看COM服务器
本文我们将讨论最简单的一种COM服务器,进程内服务器(in-process)。“进程内”意思是服务器被加载到客户端程序的进程空间。进程内服务器都是DLLs,并且与客户端程序同在一台计算机上。进程内服务器在被COM库使用之前必须满足两个条件或标准:
1. 必须正确在注册表的HKEY_CLASSES_ROOT\CLSID 键值下注册;
2. 必须输出DllGetClassObject()函数;
这是进程内服务器运行的最小需求。在注册表的HKEY_CLASSES_ROOT\CLSID 键值下必须创建一个键值,用服务器的GUID作为键名字,这个键值必须包含两个键值清单,一是服务器的位置,二是服务器的线程模型。 COM库对
DllGetClassObject() 函数进行调用是在CoCreateInstance() API中完成的。
还有三个函数通常也要输出:
DllCanUnloadNow():由COM库调用来检查是否服务器被从内存中卸载; DllRegisterServer():由类似RegSvr32的安装实用程序调用来注册服务
器;
DllUnregisterServer():由卸载实用程序调用来删除由
DllRegisterServer()创建的注册表入口;
另外,只输出正确的函数是不够的——还必须遵循COM规范,这样COM库和客户端程序才能使用服务器。
服务器生命其管理
DLL服务器的一个与众不同的方面是控制它们被加载的时间。“标准的”DLLs被动的并且是在应用程序使用它们时被随机加载/或卸载。从技术上 讲,DLL服