我說的是win32 dll,那些普通的pe文件。與我在explorer.exe過程中看到的相比,我在做測試後感到困惑。我們能否在同一個進程中加載2個同名的DLL
我寫了一個測試用以下模塊:(C++)
DLLLoader.exe鏈接A.DLL在相同的文件夾中。
B.dll鏈接到另一個文件夾中的A.dll(2)。 (A.dll(2)是與A.dll完全不同的DLL,但名稱相同)
DLLLoader.exe將通過:: LoadLibrary顯式加載B.dll。
現在我啓動DllLoader.exe,首先A.dll會被加載,但是當它試圖加載B.dll時,它只是失敗了:我懷疑這是因爲B.dll認爲A.dll已經在加載過程中,但事實上,加載的不是B.dll想要的那個,導入/導出表不能匹配,所以B.dll加載失敗。
這似乎告訴我們,我們無法在同一個進程中加載2個同名的dll,即使它們具有不同的路徑。但是,當我使用Process Explorer的監測在Windows的Explorer.exe進程中加載的模塊,我可以看到以下加載的DLL 2,用同一個名字:
COMCTL32.DLL用戶體驗控件庫C:\ WINDOWS \ WinSxS文件... \ COMCTL32.DLL
COMCTL32.DLL通用控件庫C:\ WINDOWS \ SYSTEM32 \ COMCTL32.DLL
可以在任何你提供一些線索這燈?
因此爲了加載(基於DLL依賴),我們只能有1個DLL加載相同的名稱。 –