首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CComModule::Unlock();

CComModule::Unlock();
EN

Stack Overflow用户
提问于 2010-05-27 16:26:21
回答 1查看 844关注 0票数 0

我一直在尝试确定这个函数的作用,但是在CComModule类的MSDN文档中似乎找不到它。

谁能告诉我它是用来做什么的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-28 13:32:41

此功能是为了让DllCanUnloadNow()正常工作。

您知道,当您为进程内服务器调用CoCreateInstance()时,COM会在必要时自动调用LoadLibraryEx()来加载COM服务器DLL。但是DLL会加载多长时间呢?事实上,COM会定期为每个加载的COM服务器DLL调用DllCanUnloadNow()。如果返回S_OK,则允许COM调用FreeLibrary()

什么时候卸载DLL是安全的?显然,在销毁DLL实现的所有对象之前,您无法卸载它。因此出现了"lock count“--一个全局整数变量,用于计算DLL实现的活动对象的数量。

创建新的COM对象时-从其构造函数调用CComModule::Lock() (通常为CComObject,并在对象被销毁时递增变量)-从其析构函数调用CComModule::Unlock()并递减变量。当CComModule::GetLockCount()返回零时,这意味着没有活动的对象,卸载DLL是安全的。

因此,锁计数与IUnknown实现的引用计数非常相似。引用计数是按对象计算的,锁计数是按COM进程内服务器计算的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2919525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档