- Windows操作系統何時將DLL加載到內存中?
- 該操作是在應用程序啓動時還是應用程序首先調用DLL中的某個過程時發生的?
- 一旦DLL被加載,它可以被卸載嗎?
回答
什麼時候Windows操作系統 加載到內存中的DLL?
要是連你的EXE到DLL隱含通過的.lib文件,就像你通常對於大多數Windows做的API,例如user32.dll中和KERNEL32.DLL,那麼defautl的行爲是對DLL在進程啓動時以及在調用WinMain/main函數之前加載。請參閱下面的延遲加載...
如果一個DLL依賴於另一個DLL,它將首先加載其依賴關係,如果它們尚未加載。
如果你明確地通過DLL(調用LoadLibrary,CoCreateInstance的,等...)加載代碼,然後它會被在作出這些電話
操作是否發生時 應用程序啓動或加載時 應用程序首先調用DLL中的 程序之一?
你可以擁有它。默認情況下,DLL在應用程序啓動時加載。如果您使用/DELAYLOAD linker flag,則DLL可能會推遲被加載,直到其實際需要。這是「盡最大努力」 - 如果全局變量存在奇怪的導出依賴項,則可能無法正常工作。
一旦DLL被載入,它可以被卸載嗎?
對於已鏈接的隱式DLL依賴關係,簡答題爲「否」。 FreeLibrary和CoFreeUnusedLibrary可用於LoadLibrary/CoCreateInstance調用。
我打算假設我們在說.net。在您需要代碼之前就會發生這種情況。但是您可以使用後期綁定在其他時間執行此操作。看到這個頁面link text
在windows API中,你可以明確地控制一個.dll的加載和卸載。
請參閱LoadLibrary和FreeLibrary作爲起點。
根據您使用的語言/工具,加載庫的許多細節將爲您照顧,但通常您仍然可以獲得明確的控制權,如果您確實需要。
我正在使用C++來處理winsock。任何進一步可以更詳細? – antonio081014 2010-09-22 05:26:24
- 1. 關於'delayed_job'的一些基本問題
- 2. 有關Java的一些基本問題
- 3. 關於關係數據庫的一些基本問題
- 4. Dll插件基本問題
- 5. 關於WPF的一個基本問題
- 6. 關於測試或單元測試的一些基本問題
- 7. 關於面向對象編程的一些基本問題
- 8. 關於flex/AS的一些基本問題
- 9. 需要澄清一些關於asp.net mvc的基本問題
- 10. 關於javax和java包的一些基本問題
- 11. 關於「Hello World」的一些基本問題
- 12. Cpp一些基本問題
- 13. DOM文檔:一些基本問題
- 14. 關於關注WPF的一些問題
- 15. 關於CLASSES的基本問題
- 16. 關於CodeIgniter URL的基本問題
- 17. 關於Rxjs的基本問題
- 18. 關於拳擊/ c#的基本問題#
- 19. 關於sql的基本問題
- 20. 關於Microsoft CryptoAPI的基本問題
- 21. 關於OOP的基本問題
- 22. 關於jquery和.NET的基本問題
- 23. 一些基本的COM問題
- 24. 遇到一些基本的問題KnockoutJS
- 25. 一些基本的UML問題
- 26. 一些基本的Azure問題
- 27. 關於GWT基礎知識的一些問題
- 28. 關於Git的一些(基礎)問題和說明
- 29. GWT/Java - 關於示例代碼的一些基本的UI問題
- 30. 關於流的一些問題
我使用C++來處理winsock。任何進一步可以更詳細? – antonio081014 2010-09-22 05:28:56