2012-05-11 146 views
2

如果我加載了一個帶有LoadLibrary的DLL,那麼該DLL是否能保證加載?如果不是,我怎樣才能防止重新加載。使用LoadLibrary加載DLL

實際情況:我有一個調度器,根據某些消息,它需要加載多個dll中的一個,並從中執行某些功能。我無法在編譯時鏈接到它們,所以我使用LoadLibrary。因爲可能會有很多電話,所以我不希望每次都撥打LoadLibrary,因爲這是一個瓶頸。所以我打算每個DLL只調用一次,調用GetProcAddress來獲取函數也只有一個DLL,並將其緩存在某處。但是安全嗎?我保證在任何後續調用中調用該函數都可以嗎?如果沒有,我怎麼能得到這個保證?

+0

你有沒有考慮過使用Delay-Loaded DLLs? http://msdn.microsoft.com/en-us/library/151kt790.aspx – Ferruccio

回答

8

LoadLibrary增加可執行文件的引用計數,FreeLibrary降低它。

當引用計數達到0時,可執行文件被卸載。所以你通常不必擔心它。只要沒有人在你的程序中調用FreeLibrary,Dll就會停留在那裏。

1

如果您閱讀MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175%28v=vs.85%29.aspx它說明如果dll尚未加載,會發生什麼行爲,以及如果dll已經加載會發生什麼,所以您不應該擔心這種開銷。

如果指定的模塊是不是已經加載的 調用過程中DLL時,系統調用該DLL的與 DLL_PROCESS_ATTACH值DllMain函數。如果DllMain返回TRUE,則LoadLibrary返回 模塊的句柄。

相關問題