WEB开发网
开发学院软件开发VC COM编程入门:深入COM服务器 阅读

COM编程入门:深入COM服务器

 2006-07-21 11:44:59 来源:WEB开发网   
核心提示: 进程内服务器在被COM库使用之前必须满足两个条件或标准:1、 必须正确在注册表的HKEY_CLASSES_ROOT\CLSID 键值下注册,2、 必须输出DllGetClassObject()函数,COM编程入门:深入COM服务器(2),这是进程内服务器运行的最小需求,在注册表的HKEY_

进程内服务器在被COM库使用之前必须满足两个条件或标准:

1、 必须正确在注册表的HKEY_CLASSES_ROOT\CLSID 键值下注册。

2、 必须输出DllGetClassObject()函数。

这是进程内服务器运行的最小需求。在注册表的HKEY_CLASSES_ROOT\CLSID 键值下必须创建一个键值,用服务器的GUID作为键名字,这个键值必须包含两个键值清单,一是服务器的位置,而是服务器的线程模型。 COM库对DllGetClassObject()函数进行调用是在CoCreateInstance() API中完成的。

还有三个函数通常也要输出:

o DllCanUnloadNow():由COM库调用来检查是否服务器被从内存中卸载。

o DllRegisterServer():由类似RegSvr32的安装实用程序调用来注册服务器。

o DllUnregisterServer():由卸载实用程序调用来删除由DllRegisterServer()创建的注册表入口。

另外,只输出正确的函数是不够的——还必须遵循COM规范,这样COM库和客户端程序才能使用服务器。

服务器生命其管理

DLL服务器的一个与众不同的方面是控制它们被加载的时间。“标准的”DLLs被动的并且是在应用程序使用它们时被随机加载/或卸载。从技术上讲,DLL服务器也是被动的,因为不管怎样它们毕尽还是DLL,但COM库提供了一种机制,它允许某个服务器命令COM卸载它。这是通过输出函数DllCanUnloadNow()实现的。这个函数的原型如下:

HRESULT DllCanUnloadNow();

当客户应用程序调用COM API CoFreeUnusedLibraries()时,通常出于其空闲处理期间,COM库遍历这个客户端应用已加载所有的DLL服务器并通过调用它的DllCanUnloadNow()函数查询每一个服务器。另一方面,如果某个服务器确定它不再需要驻留内存,它可以返回S_OK让COM将它卸载。

上一页  1 2 3 4 5 6 7  下一页

Tags:COM 编程 入门

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接