LoadLibraryEx не может найти DLL или ее зависимости ⇐ C++
-
Anonymous
LoadLibraryEx не может найти DLL или ее зависимости
В настоящее время я пишу программу, которая загружает DLL (a.dll), которая использует другую DLL (b.dll).
При использовании функции LoadLibrary загрузка a.dll завершается успешно; при условии, что b.dll находится в том же каталоге, что и исполняемый файл (независимо от того, где находится a.dll). Однако для моих целей b.dll не может находиться в том же каталоге, что и исполняемый файл. Поэтому я прибегнул к LoadLibraryEx, у которого есть параметр flags, позволяющий задать более конкретные параметры загрузки DLL. Однако никто из них, похоже, ничего не делает. Что бы я ни делал последние несколько часов, все вызовы LoadLibraryEx завершаются неудачей и возвращают код ошибки 126.
HANDLE дескриптор; // это работает, если b.dll находится там же // каталог как исполняемый файл handle = LoadLibrary("a.dll"); FreeLibrary (дескриптор); // это тоже работает, поскольку использование значения // ноль для флагов заставляет его вести себя хорошо // то же, что и LoadLibrary handle = LoadLibraryEx("a.dll", NULL, 0); FreeLibrary (дескриптор); // это не работает, даже если есть b.dll // в том же каталоге, что и исполняемый файл // файл handle = LoadLibraryEx("a.dll", NULL, LOAD_LIBRARY_SEARCH_APPLICATION_DIR); // это не работает, даже если есть b.dll // в том же каталоге, что и .dll handle = LoadLibraryEx("a.dll", NULL, LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR); // это не работает, даже если есть b.dll // в одном из каталогов, указанных // успешный вызов AddDllDirectory Файл cookie DLL_DIRECTORY_COOKIE = AddDllDirectory(L"C:\\Fully\\Qualified\\Path"); handle = LoadLibraryEx("a.dll", NULL, LOAD_LIBRARY_SEARCH_USER_DIRS); RemoveDllDirectory(cookie);
В настоящее время я пишу программу, которая загружает DLL (a.dll), которая использует другую DLL (b.dll).
При использовании функции LoadLibrary загрузка a.dll завершается успешно; при условии, что b.dll находится в том же каталоге, что и исполняемый файл (независимо от того, где находится a.dll). Однако для моих целей b.dll не может находиться в том же каталоге, что и исполняемый файл. Поэтому я прибегнул к LoadLibraryEx, у которого есть параметр flags, позволяющий задать более конкретные параметры загрузки DLL. Однако никто из них, похоже, ничего не делает. Что бы я ни делал последние несколько часов, все вызовы LoadLibraryEx завершаются неудачей и возвращают код ошибки 126.
HANDLE дескриптор; // это работает, если b.dll находится там же // каталог как исполняемый файл handle = LoadLibrary("a.dll"); FreeLibrary (дескриптор); // это тоже работает, поскольку использование значения // ноль для флагов заставляет его вести себя хорошо // то же, что и LoadLibrary handle = LoadLibraryEx("a.dll", NULL, 0); FreeLibrary (дескриптор); // это не работает, даже если есть b.dll // в том же каталоге, что и исполняемый файл // файл handle = LoadLibraryEx("a.dll", NULL, LOAD_LIBRARY_SEARCH_APPLICATION_DIR); // это не работает, даже если есть b.dll // в том же каталоге, что и .dll handle = LoadLibraryEx("a.dll", NULL, LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR); // это не работает, даже если есть b.dll // в одном из каталогов, указанных // успешный вызов AddDllDirectory Файл cookie DLL_DIRECTORY_COOKIE = AddDllDirectory(L"C:\\Fully\\Qualified\\Path"); handle = LoadLibraryEx("a.dll", NULL, LOAD_LIBRARY_SEARCH_USER_DIRS); RemoveDllDirectory(cookie);
Мобильная версия