Из моего чтения MSDN documentation, я бы подумал (в случае, когда dll этого базового имени еще не загружен), что передача полного абсолютного имени файла в LoadLibraryExW
будет выглядеть только по этому пути.LoadLibraryEx игнорирует полностью заверенное имя пути?
E.g. (Отметим, что это правильный путь CSIDL_SYSTEM, если это имеет значение)
LoadLibraryExW (L"C:\\Windows\\System32\\foobar.dll", LOAD_LIBRARY_AS_DATAFILE);
должен потерпеть неудачу, если этот файл не существует в этом месте. Но я получаю забавные результаты, которые заставляют меня думать, что он берет базовое имя и применяет его к PATH
, в Windows 8.1. и найти файл с тем же именем в другом месте.
Кроме того, если я использую LOAD_LIBRARY_AS_DATAFILE
, это мешает мне узнать, где именно он его нашел.
Что делает эта функция действительно в этом отношении и зависит от версии ОС?
(Кстати, я знаю о LOAD_LIBRARY_SEARCH_SYSTEM32
, но не существует на всех версиях ОС. Я хочу работать на что-нибудь еще в XP.)
Это особенно сбивает с толку, так как я думал, что используя абсолютный путь был эффективным решением в предыдущее время, когда я увидел, что он обнаружил неправильные файлы через PATH, в качестве переносной альтернативы LOAD_LIBRARY_SEARCH_SYSTEM32
. Так что, возможно, это зависит от ОС или каких-то других волшебных изменений.
Вам нужно будет показать код и предоставить тестовый пример с полной информацией. В частности, обратите внимание на применимые флаги «LOAD_», упомянутые в связанной с вами документации. – dxiv
Вы можете использовать Process Monitor (доступный с веб-сайта MS), чтобы подтвердить, действительно ли файл загружается из другого места. Одна мысль: вы помнили использовать обратную косую черту на пути, а не косые черты, не так ли? –
В одном случае, когда я думаю, что полностью определенный путь к DLL будет получен из другого фактического местоположения, когда используется перенаправление Wow64. Если ваше приложение представляет собой 32-разрядное приложение, работающее на ОС Win64, по умолчанию доступ к файлу System32 будет перенаправлен на SysWow64. См. Https://msdn.microsoft.com/en-us/library/windows/desktop/aa384187.aspx Возможно, это то, что происходит с вами? Измените путь к чему-то другому, кроме System32, и я думаю, вы увидите, что функция LoadLibraryEx() завершилась с ошибкой. –