Russian Qt Forum

Компиляторы и платформы => Windows => Тема начата: QuAzI от Июнь 16, 2011, 09:45



Название: DLL из WinLogon не подтягивает sqldriver
Отправлено: QuAzI от Июнь 16, 2011, 09:45
Сделал библиотечку, должна ловить события аля логин/включение/блокировка хоста. И ложить их в базу. Всё перекорябал, но в итоге толку не добился. В файл-лог данные пишутся и вижу
Код:
Open database
localhost
3306
armuser
mypass
ARM
Error Driver not loaded Driver not loaded
Drivers:
QMYSQL3
QMYSQL
AppLibPath:
C:/WINDOWS/system32
C:/WINDOWS/system32/sqldrivers
Driver not loaded Driver not loadedend
Т.е. учётка для подключения из реестра загрузилась, DLL загрузилась, событие споймалось, но именно подключиться к БД не может.
библиотека лежит в C:\windows\system32, где лежат и остальные нужные библиотеки, это
Код:
libgcc_s_dw2-1.dll
libmysql.dll
mingwm10.dll
msvcrt.dll
QtCore4.dll
QtSql4.dll
И до кучи директория sqldrivers с qsqlmysql4.dll внутри.
Просматриваю Dependency - все библиотечки находятся. Но почему именно sqldrivers\qsqlmysql4.dll не подхватывается из WinLogon, не могу понять.

С этими же библиотеками обычное графическое приложение, запущенное из юзверя, работает.


Название: Re: DLL из WinLogon не подтягивает sqldriver
Отправлено: Mikhail от Июнь 16, 2011, 11:03
И где е лежит директория sqldrivers?
То же в C:/WINDOWS/system32 ?
Для плагинов в том числе и баз данных есть предопределенные места:
QTDIR/plugins
либо
app_Dir/plugins


Название: Re: DLL из WinLogon не подтягивает sqldriver
Отправлено: QuAzI от Июнь 16, 2011, 11:28
да, директория лежит в SYSTEM32 (т.е. в директории с выполняемой библиотечкой, при этом на момент запуска это же явдяется текущей рабочей директорией). Пробовал из директории либу кидать в SYSTEM32 без поддиректории, а так же в sqldrivers закидывать все библиотеки, которые для qsqlmysql4.dll нужны. Совершенно никакой реакции


Название: Re: DLL из WinLogon не подтягивает sqldriver
Отправлено: Mikhail от Июнь 16, 2011, 18:04
Вам следует внимательно изучать документацию Qt.

Ознакомтесь с wiki.crossplatform.ru
"Решение проблем

Вы должны всегда использовать библиотеки клиента, которые были собраны тем же компилятором, который вы используете для своего проекта. Если вы не можете получить описание источника сборки библиотеки клиента самостоятельно, попробуйте удостовериться, что предсобранная библиотека совместима с вашим компилятором, иначе вы получите множество ошибок. Некоторые компиляторы имеют инструменты для преобразования библиотек, например: Borland предоставляет инструмент COFF2OMF.EXE, для преобразования библиотек, которые были собраны в Microsoft Visual C++.

Если компиляция плагина прошла успешно, но он не может быть загружен, убедитесь в том, что следующие требования выполнены:
Убедитесь, что вы используете shared Qt библиотеку; вы не может использовать плагины в статической сборке.
Убедитесь, что плагин в правильной директории. Для этого можно использовать  QApplication::libraryPaths(), чтобы определить, где Qt ищет плагины.
Убедитесь, что клиентские библиотеки СУБД доступны. Под Unix, выполните команду ldd и введите имя плагина в качестве параметра, например: ldd libqsqlmysql.so. Вы получите предупреждение, если какая-то из клиентских библиотек не найдена. Под Windows, вы можете использовать Visual Studio dependency walker.
Скомпилируйте Qt с установленным QT_DEBUG_COMPONENT, чтобы получить более подробную отладочную информацию, когда загружаются плагины.

Если у вас возникли проблемы с загрузкой плагинов, и вы видите ошибку вроде этой:
     QSqlDatabase: QMYSQL driver not loaded
     QSqlDatabase: available drivers: QMYSQL

проблема вероятно в том, что плагин имеет неправильный ключ сборки. Для отладки удалите соответствующую запись в $HOME/.qt/qt_plugins_(qtversion).rc файле.

После чего снова попытайтесь загрузить этот плагин, и вы получите более детальное описание ошибки."
http://www.wiki.crossplatform.ru/index.php/Qt:Документация_4.3.2/sql-driver#qsqlite

Драйверы БД должны быть либо в QTDIR/plugins/sqldrivers
либо в app_dir/plugins/sqldrivers


Название: Re: DLL из WinLogon не подтягивает sqldriver
Отправлено: QuAzI от Июнь 18, 2011, 09:12
Плагин слинкован, плагин рабочий (используется в паре других приложений). Плагин ложу относительно исполняемого файла везде одинаково.
Задачу решил весьма тупо - вынес код работы с БД в отдельный exe и из DLL при событии запускаю этот exe с параметрами. Как ни крутил с qApp, QApplication, QCoreApplication, даже если драйвер показывается в списке доступных драйверов при перечислении и лежит правильно, всё равно он не подхватывается из DLL.
У меня Qt SDK 2010.05 (может быть в какой-то другой версии это и не так).