Ошибка LoadLibrary с ошибкой модуля не найден - возможные проблемы с зависимостями
Я пытался загрузить 32-битную DLL с помощью C++ (из 32-битного приложения, на Windows 7 64-битной). LoadLibrary возвращает NULL, а GetLastError возвращает 126 для "Указанный модуль не найден".
Я передаю полный адрес функции LoadLibrary. Я открыл dll в Dependency Walker, который сказал, что GPSVC.dll была отсутствующей зависимостью.
Судя по поиску, который я сделал, похоже, что Dependency Walker часто ложно показывает этот GPSVC.dll как отсутствующую зависимость, и его 32-разрядная версия отсутствует, поэтому я не думаю, что это реальная проблема.
В прошлом я не слишком разбирался с dll, так что, надеюсь, это относительно простая проблема, из которой я могу извлечь уроки.
Заранее благодарю за любую помощь!
2 ответа
Ну, я решил свою проблему, и, к сожалению, это довольно очевидное решение. Я добавил каталог, который содержал мою dll, в переменную PATH. Очевидно, dll не ищет в своих собственных каталогах свои зависимости.
Можете ли вы отладить в DllMain другой DLL? Если да, вы можете проверить прямо в отладчике. С Windbg вы можете прервать загрузку модуля, чтобы вы могли сделать шаг за шагом. Вы прямо ссылаетесь на библиотеку DLL? Если нет, вы можете попытаться сделать это, чтобы проверить, какое сообщение об ошибке отобразит ОС. Если это 0xC0000142, то DllMain вернул false. Если это 0xC0000022, то исполняемый файл или один из зависимых dll не имеют прав на выполнение. Вы код 126 просто модуль не найден, который, кажется, рассказывает всю историю. Вы можете вручную установить переменную PATH в каталог, где находится отсутствующая dll. Развертываете ли вы dll на какой-то другой машине? Если да, это может быть связано с отладкой C-Runtime, которая не установлена на обычных компьютерах.
С уважением, Алоис Краус