我一直在尝试确定这个函数的作用,但是在CComModule类的MSDN文档中似乎找不到它。
谁能告诉我它是用来做什么的?
发布于 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进程内服务器计算的。
https://stackoverflow.com/questions/2919525
复制相似问题