Ошибка LoadLibrary с ошибкой модуля не найден - возможные проблемы с зависимостями - PullRequest
4 голосов
/ 16 февраля 2011

Я пытался загрузить 32-разрядную библиотеку DLL с помощью C ++ (из 32-разрядного приложения, в Windows 7, 64-разрядная версия).LoadLibrary возвращает NULL, а GetLastError возвращает 126 для «Указанный модуль не найден».

Я передаю полный адрес функции LoadLibrary.Я открыл dll в Dependency Walker, в котором говорилось, что GPSVC.dll была отсутствующей зависимостью.

Из проведенного мной поискового запроса похоже, что Dependency Walker часто ошибочно показывает этот GPSVC.dll как отсутствующую зависимость, инет 32-битной версии, так что я не думаю, что это настоящая проблема.

В прошлом я не слишком разбирался с dll, поэтому, надеюсь, это относительно простая проблема, из которой я могу извлечь уроки.

Заранее спасибо за любую помощь!

Ответы [ 2 ]

3 голосов
/ 16 февраля 2011

Ну, я решил свою проблему, и, к сожалению, это довольно очевидное решение.Я добавил каталог, который содержал мою dll, в переменную PATH.Очевидно, dll не ищет в своих собственных каталогах свои зависимости.

1 голос
/ 16 февраля 2011

Можете ли вы отладить в DllMain другой DLL?Если да, вы можете проверить прямо в отладчике.С Windbg вы можете прервать загрузку модуля, чтобы вы могли сделать шаг за шагом.Вы прямо ссылаетесь на библиотеку DLL?Если нет, вы можете попытаться сделать это, чтобы проверить, какое сообщение об ошибке отобразит ОС.Если это 0xC0000142, то DllMain вернул false.Если это 0xC0000022, то исполняемый файл или один из зависимых dll не имеют прав на выполнение.Вы код 126 просто модуль не найден, который, кажется, рассказывает всю историю.Вы можете вручную установить переменную PATH в каталог, где находится отсутствующая dll.Развертываете ли вы dll на какой-то другой машине?Если да, возможно, вы ссылаетесь на отладочное C-Runtime, которое не установлено на обычных машинах.

С уважением, Алоис Краус

...