Ошибка LoadLibrary и обходчик зависимостей не помогает

Я пытался использовать плагин 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 ответ

Решение

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

Другие вопросы по тегам