Что может помешать загрузке DLL с LoadLibrary? - PullRequest
5 голосов
/ 09 мая 2009

У меня есть бизнес-функция JD Edwards, написанная на Microsoft Visual C ++ как модуль C. Я использую LoadLibrary для доступа к сторонним DLL. В автономной тестовой программе код работает просто отлично. Когда я запускаю его из JDE, LoadLibrary возвращает NULL, а GetLastError возвращает 126, что означает The specified module could not be found в соответствии с MSDN. Я попытался ввести полный путь к DLL, и да, я вспомнил, чтобы удвоить \ символов в пути. Без разницы.

Я проверил, чтобы убедиться, что нет зависимостей, которые будут препятствовать загрузке DLL; DUMPBIN / DEPENDENTS возвращает следующее:

WSOCK32.dll
USER32.dll
GDI32.dll
WINSPOOL.DRV
ADVAPI32.dll
KERNEL32.dll

Они похожи на стандартные библиотеки Windows DLL, поэтому я в растерянности.

Ответы [ 6 ]

5 голосов
/ 09 мая 2009

Отсутствует зависимость? Вы проверили с помощью Dependency Walker , что все библиотеки, на которые есть ссылки, найдены?

3 голосов
/ 12 мая 2009

Если вы подключите отладчик во время вызова LoadLibrary, он может выдать информацию об ошибке для отладки вывода. В дополнение к другим предложениям здесь, если в манифесте есть ошибка, эта проблема возникнет.

Я почти уверен, что для вас это проблема зависимости. Попробуйте ProcMon, а также попробуйте запустить на Vista, чтобы увидеть, решит ли это проблему. Вы можете получить тестовое изображение VPC здесь .

1 голос
/ 05 июня 2009

Я однажды попал в тот же кошмар. Диагностировать было невозможно, я только что узнал, что переустановка пути порядка списка поиска в dll (ключевое слово здесь, вероятно, «список», а не «порядок») устранила проблему.

SetDllDirectory (NULL);

Объяснение состоит в том, что сторонняя DLL в середине, вероятно, возилась с ней, не восстанавливая ее первоначальное состояние. Это может объяснить, почему работало только ваше тестовое приложение.

0 голосов
/ 22 сентября 2009

Если вы не нашли ответ, проверив зависимости, я бы посоветовал сосредоточиться на возможных проблемах, связанных с архитектурой.

Вы упомянули, что используете автономную тестовую среду, но когда вы пробуете ее в обычной среде, она не работает. Настройка бизнес-функции выполняется на сервере?

Прошло довольно много времени с тех пор, как я последний раз работал с JDE. Я помню, что однажды я написал BSFN на C, чтобы вызвать несколько UBE для своего рода синхронизации, и это работало нормально на моей локальной машине и не работало, когда я тестировал на сервере. Было что-то, что сервер не мог найти DLL (хотя я указывал путь) и некоторые настройки, которые требовались. Кроме того, была разница, которая была критической в ​​моем случае: на моей машине BSFN ожидал завершения UBE и фиксировал состояние, на сервере - нет, и это также было связано с настройками объектов. .

Опять же, если вы не нашли ничего полезного, попробуйте обратиться за помощью на www.jdelist.com.

0 голосов
/ 08 июня 2009

Кроме того, Обходчик зависимостей можно запустить с помощью опции профиля. В этом случае исполняемый файл должен быть загружен в ходок зависимостей. После меню «Профиль» можно использовать.

Затем приложение запускается и дерево dll заполняется. Это также покажет, если отсутствует задержка загрузки dll и прочее.

0 голосов
/ 12 мая 2009

Вы можете попробовать выполнить тестирование, пока ProcMon работает, и посмотреть, есть ли в нем какие-либо ошибки, если включен мониторинг файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...