0
A
回答
2
該功能用於DllCanUnloadNow()
正常工作。
您知道,當您爲進程內服務器調用CoCreateInstance()
時,COM會自動調用LoadLibraryEx()
來根據需要加載COM服務器DLL。但是,DLL多長時間保持加載?事實上,COM爲每個加載的COM服務器DLL定期調用DllCanUnloadNow()
。如果它返回S_OK
COM被允許呼叫FreeLibrary()
。
什麼時候可以安全地卸載DLL?顯然你不能卸載它,直到由DLL實現的所有對象都被銷燬。因此,「鎖定計數」是一個全局整數變量,它計算由DLL實現的活動對象的數量。
當創建一個新的COM對象 - CComModule::Lock()
從它的構造(通常CComObject
構造函數)調用並遞增變量,當對象被銷燬 - CComModule::Unlock()
從其析構函數調用,並且遞減變量。當CComModule::GetLockCount()
返回零時,表示沒有活動對象,並且可以安全地卸載該DLL。
所以鎖定計數與IUnknown
實施的參考計數非常相似。引用計數是每個對象,鎖定計數是每個COM進程內服務器。
相關問題
- 1. ATL :: CComModule :: RegisterServer
- 2. CComModule UnregisterServer錯誤?
- 3. Titanium「resume」event not unlock on unlock(iphone)
- 4. @synchronized vs lock/unlock
- 5. boost :: scoped_lock unlock
- 6. DirectSoundBuffer8 :: Lock/Unlock
- 7. In App Purchase-Unlock Features
- 8. pthread_mutex_lock/unlock的性能
- 9. 爲什麼std :: mutex :: unlock()不是noexcept
- 10. Windows Hello Unlock Companion設備框架後臺任務不被觸發
- 11. 智能封面的iPad Cover Lock/Unlock設置
- 12. 我是否需要在Boost線程函數中調用unlock()?
- 13. 如何以非交互方式調用「docker swarm unlock」?
- 14. 應該signal()方法總是在lock()和unlock()之間?
- 15. Direct3D的VertexBuffer鎖()和unlock()函數不同D3DPOOL
- 16. Camera.lock,unlock()自Android 4.0以來自動爲您管理?
- 17. 在可能已經解鎖的鎖上調用unlock()是否安全?
- 18. 如何將VisualSVN服務器從Copy-Modify-Merge重新配置爲Lock-Modify-Unlock?
- 19. 如何使用CAtlComModule實現COM事件接收器?
- 20. DLL自注冊:如何爲當前用戶註冊?
- 21. 錯誤1503:服務未及時響應啓動或控制請求
- 22. 在.rgs文件語法中是否有文檔?
- 23. SAPI:應用程序沒有講話
- 24. 如何使Visual C++ 9不發出實際上從未被調用過的代碼?
- 25. 無法打開包含文件:「atlbase.h」:沒有這樣的文件或目錄
- 26. 鎖樹算法死鎖檢測
- 27. jQuery Slider事件不會觸發
- 28. iOS SDK - NSLock消息:「從未鎖定的線程解鎖」
- 29. jquery和jquery.ui可以在除IE 7之外的所有瀏覽器中工作 - 爲什麼?
- 30. 中性浴室同步