Я имею в виду win32 dll, эти простые pe-файлы. Я запутался после того, как сделал тест по сравнению с тем, что увидел в процессе explorer.exe.
Я написал тест со следующими модулями: (C ++)
DLLLoader.exe ссылается на A.dll в той же папке.
B.dll ссылается на A.dll (2) в другой папке. (A.dll (2) - это совершенно другая DLL от A.dll, но с тем же именем)
DLLLoader.exe будет явно загружать B.dll через :: LoadLibrary.
Теперь я запускаю DllLoader.exe, во-первых, A.dll будет загружен, но затем, когда он попытается загрузить B.dll, он просто потерпел неудачу: я подозреваю, что это потому, что B.dll думает, что A.dll уже загружен в процессе, но фактически загруженный файл не тот, который требуется B.dll, таблица импорта / экспорта не может соответствовать, поэтому загрузка B.dll не удалась.
Это говорит нам о том, что мы не можем загрузить 2 dll с одинаковыми именами в одном процессе, даже если они имеют разный путь.
Но когда я использовал обозреватель процессов для мониторинга загруженных модулей в процессе explorer.exe в Windows, я мог видеть, как загружаются следующие 2 библиотеки с таким же именем:
Пользовательская библиотека comctl32.dll управляет библиотекой C: \ WINDOWS \ WinSxS ... \ comctl32.dll
Библиотека общих элементов управления comctl32.dll C: \ WINDOWS \ system32 \ comctl32.dll
Может ли кто-нибудь из вас пролить свет на это?