客户应用程序调用COM API CoFreeUnusedLibraries()时,COM库遍历这个客户端应用已加载所有的DLL服务器并通过调用它的DllCanUnloadNow()函数查询每一个服务器

服务器生命其管理

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

         HRESULT DllCanUnloadNow();

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

extern UINT g_uDllRefCount;  // 服务器的引用计数HRESULT DllCanUnloadNow(){    return (g_uDllRefCount > 0) ? S_FALSE :S_OK;}

如何处理引用计数将在下一节涉及到具体代码时讨论。

阅读更多
文章标签: 服务器 dll api
个人分类: com
上一篇处理HRESULT
下一篇实现接口,从IUnknown开始
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭