В Windows, каковы предпочтения того, как Windows просматривает эти папки, чтобы найти .dll? Например, если у меня есть две версии одной и той же dll, одна в папке System 32 и одна в System Path, где Windows будет искать в первую очередь?
решение1
Сначала Windows ищет «известные библиотеки DLL», такие как Kernel32.dll и User32.dll.
Затем Windows ищет библиотеки DLL в следующей последовательности:
Системный каталог Windows. Функция GetSystemDirectory извлекает путь к этому каталогу.
Каталог Windows. Функция GetWindowsDirectory извлекает путь к этому каталогу.
Каталог, в котором находится исполняемый модуль текущего процесса.
Текущий каталог.
Каталоги, перечисленные в переменной среды PATH.
Обратите внимание, что в 64-битной Windows 32-битные процессы используют 32-битный каталог system32, а не 64-битный.
Он немного отличается от 2k3 или XP до sp1.
решение2
Зависит от PATH
переменной окружения, но обычно %windir%\System32
добавляется перед %windir%
.
Надев шляпу разработчика: по возможности я бы избегал установки чего-либо в эти папки, особенно для последних версий ОС с поддержкой параллельной сборки (например, XP/Vista/2008).
Если вы установили приложение, которое поместило .DLL в оба места, то я бы посоветовал обратиться к разработчику, чтобы он исправил это.
решение3
Наслаждайтесь этим:
http://msdn.microsoft.com/en-us/library/7d83bc18(VS.80).aspx
Обратите внимание на комментарий «Заказ изменился!», ссылающийся на эту страницу:
решение4
Загрузка DLL обрабатывается функцией Windows API LoadLibrary, порядок поиска описан в документации:http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx