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

转载 2012年03月31日 09:11:03

服务器生命其管理

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;}

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

相关文章推荐

基于 Ajax 的 web 应用程序中各种客户端-服务器通信机制

现代的 web 应用程序都是基于各种 Ajax 相关概念。Ajax 技术的使用导致 web 页面上交互式或动态接口的增加。Ajax 革命始于这样的观念,即 web 应用程序可以在后台从服务器异步检索数...
  • e_wsq
  • e_wsq
  • 2011年12月30日 01:02
  • 589

DCOM揭秘之六——远程COM调用(服务器端和客户端)

DCOM揭秘之六 2001-08-23 09:27作者:QQ新人类出处:Yesky责任编辑:方舟    Distributed COM --跨网络工作   ...

【PB】pb应用程序不装sqlserver客户端进行连接服务器端解决方案(整理)

PB不装SQL客户端的DLL dbmsgnet.dll dbmsrpcn.dll dbmsshrn.dll dbmsvinn.dll dbnetlib.dll dbnmpntw.dll ...

Oracle 服务器端客户端字符集设置对应用程序的影响

在Oracle数据库中如果服务器端客户端字符集设置不当,就会造成保存到数据库的数据不会正常保存,或者数据库里的数据在客户端不能正常显示,出现烂码的现象。 尤其是以SQLPLUS操作的时候,由于SQL...
  • kkdelta
  • kkdelta
  • 2012年01月14日 11:15
  • 2446

在bs系统中客户端调用dll组件(js调用pb写的com组件)

用JavaScript直接调用dll组件或其他com组件是不行的,但是JavaScript可以调用activex控件,因此,为了实现js调用dll,在两者之间增加一层activex.即 Ja...
  • tgh1981
  • tgh1981
  • 2011年09月15日 11:20
  • 4747

抛弃LCDS和FMS,在tomcat下开发Red5应用(第四篇)-客户端和服务器端的方法互相调用

客户端和服务器端的方法相互调用比较重要,在线列表基本上全是用这种方式实现的,当然也有使用RemoteSharedObject来实现的,但本人不太喜欢用RemoteSharedObject,只是用Rem...

抛弃LCDS和FMS,在tomcat下开发Red5应用(第五篇)-客户端和服务器端方法调用的参数传递

在上一篇演示了客户端和服务器端方法调用,其实已经一并演示了参数传递的过程,但都是基本数据类型(ps:AS3的String,int,Number,Boolean,Array,Object对应到red5这...

【script代码段】通过<script src="http://xxx.com/index.php"></script>中的src属性将服务器断数据传到客户端

一、案例:通过标签的src属性从服务器端php文件返回数据到客户端 二、"http://www.xxx.com/api.php?op=count&id=2162&modelid=1"中经过一些列...

CA服务器开开发(三)---UsbKey认证 客户端Activex Com组件

使用Activex主要为了嵌入网页和服务端C#来调用加密。这里只给出关键代码吧 1.私钥解密 STDMETHODIMP CMAddr::DePrivKey(BSTR encode, BSTR* o...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:客户应用程序调用COM API CoFreeUnusedLibraries()时,COM库遍历这个客户端应用已加载所有的DLL服务器并通过调用它的DllCanUnloadNow()函数查询每一个服务器
举报原因:
原因补充:

(最多只允许输入30个字)