我一直在试图确定此函数做什么,但我似乎无法给的CComModule类的MSDN文档下的任何地方找到它。
谁能告诉我它是什么用的?
我一直在试图确定此函数做什么,但我似乎无法给的CComModule类的MSDN文档下的任何地方找到它。
谁能告诉我它是什么用的?
该功能对于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进程内服务器。