的CComModule ::解锁();(CComModule::Unlock();)

2019-11-03 17:06发布

我一直在试图确定此函数做什么,但我似乎无法给的CComModule类的MSDN文档下的任何地方找到它。

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

Answer 1:

该功能对于DllCanUnloadNow()才能正常工作。

你知道,当你调用CoCreateInstance()一个进程内服务器COM调用自动的LoadLibraryEx()如果需要加载COM服务器DLL。 不过多久DLL加载保持? 事实上COM调用DllCanUnloadNow()为每一个加载COM服务器定期DLL。 如果返回S_OK COM允许调用FreeLibrary()

如果是安全的卸载DLL? 显然,直到由DLL实现的所有对象都被破坏则无法卸载它。 所以这里来“锁定计数” - 一个全球整型变量计算由DLL中实现活动对象的数量。

当创建一个新的COM对象- CComModule::Lock()从它的构造(通常称为CComObject构造函数),并增加变量,当一个对象被销毁- CComModule::Unlock()从它的析构函数调用,并且递减变量。 当CComModule::GetLockCount()返回零就意味着有没有现场的对象和它的安全卸载DLL。

所以锁定次数非常类似于实施的引用计数IUnknown 。 引用计数是每个对象,锁计数是每COM进程内服务器。



文章来源: CComModule::Unlock();
标签: c++ com