Czy możemy załadować 2 biblioteki DLL o tej samej nazwie w jednym procesie

Mówię o bibliotekach win32, tych zwykłych plikach pe. Jestem zdezorientowany po wykonaniu testu w porównaniu z tym, co widziałem w procesie explorer.exe.

Napisałem test z następującymi modułami: (C ++)
DLLLoader.exe prowadzi do pliku A.dll w tym samym folderze.
B.dll łączy się z A.dll (2) w innym folderze. (A.dll (2) to zupełnie inna biblioteka DLL od A.dll, ale o tej samej nazwie)
DLLLoader.exe załaduje B.dll bezpośrednio przez :: LoadLibrary.
Teraz uruchamiam DllLoader.exe, po pierwsze, zostanie załadowany plik A.dll, ale gdy spróbuje załadować B.dll, to po prostu się nie powiodło: podejrzewam, że to dlatego, że B.dll uważa, że ​​proces A.dll jest już załadowany, ale w rzeczywistości załadowany plik nie jest tym, którego chciał B.dll, tabela importu / eksportu nie może się równać, więc załadowanie pliku B.dll nie powiodło się.
Wydaje się, że nie możemy załadować 2 bibliotek DLL o tej samej nazwie w tym samym procesie, nawet jeśli mają inną ścieżkę.

Ale kiedy użyłem eksploratora procesów do monitorowania załadowanych modułów w procesie explorer.exe systemu Windows, mogłem zobaczyć następujące 2 dll ładowane o tej samej nazwie:
Comctl32.dll User Experience Control Library C: WINDOWS WinSxS ... comctl32.dll
comctl32.dll Common Controls Library C: WINDOWS 3232 comctl32.dll

Czy ktokolwiek z was mógłby rzucić na to trochę światła?

questionAnswers(2)

yourAnswerToTheQuestion