Ошибка LoadLibrary и обходчик зависимостей не помогает - PullRequest
2 голосов
/ 03 июня 2011

Я пытался использовать плагин QOCI для QtSql, пока у меня не возникло несколько проблем: Почему плагин QOCI не работает

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

У меня есть файл dll (называемый qsqloci4.dll). Когда я пытаюсь загрузить его с помощью LoadLibrary,это терпит неудачу, и GetLastError возвращает ERROR_MOD_NOT_FOUND.Когда я пытаюсь загрузить его с помощью LoadLibraryEx, а 3-й параметр - DONT_RESOLVE_DLL_REFERENCES, загружается успешно (не возвращает NULL).

Итак, я подумал, что это проблема зависимости.Я открыл файл dll с помощью обходчика зависимостей, там было 2 файла, которые не удалось найти: QtCore4.dll и QtSql4.dll.Однако эти файлы находятся в рабочем каталоге приложения, и другие DLL-файлы, которые зависят от этих DLL-библиотек (например, qsqlpsql4.dll), успешно загружены.

Другие библиотеки DLL (которые находятся в обходе зависимостей):

  • oci.dll: находится в той же папке, что и QtCore4.dll и QtSql4.dll, означает, что мое приложение может получить к нему доступ
  • kernel32.dll: я считаю, что проще всего найти DLLмоим приложением
  • msvscr80.dll: другие dll-файлы, которые используют это, могут быть успешно загружены.

Вот мой вопрос: данный обходчик зависимостей говорит: «У вас есть все dll, кроме qtединицы ", и я уверен, что у меня есть qt dll. Какова еще причина сбоя LoadLibrary с ERROR_MOD_NOT_FOUND?

1 Ответ

5 голосов
/ 03 июня 2011

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

...