假設您執行以下操作:COM對象是否負責將自己的模塊保存在內存中?
1)使用LoadLibrary加載foo.dll。
2)使用GetProcAddress獲取指向函數的指針。
3)調用該函數,爲您提供對該模塊中實現的COM對象的引用。
4)通過調用FreeLibrary來釋放foo.dll。
5)調用COM對象上的方法。
你會期望第5步成功,並沒有AV?也就是說,COM對象本身負責調用LoadLibrary(再次)來增加Windows爲每個模塊保留的引用計數,從而確保它不會超過模塊?
非常有趣。如果我們說在步驟3中調用的函數名爲MyCreateInstance,答案會改變嗎?即它是在CoCreateInstance之後建模的?謝謝! – 2009-06-24 23:29:16
否。在上面的「標準」版本中,CoLoadLibrary調用維護對dll的引用 - 只有在安全的情況下才會釋放該引用(通過查看對COM服務器中創建的對象的實時引用,或者在你的版本中,你需要確保你自己做到這一點 – 2009-06-24 23:36:31