Ошибка 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 в динамическом режиме, потому что есть некоторые зависимости, которые будут разрешены путем явного связывания. Я считаю, что вы делаете это из меню профиля.