Russian Qt Forum
Май 19, 2024, 20:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: DLL из WinLogon не подтягивает sqldriver  (Прочитано 4692 раз)
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, не могу понять.

С этими же библиотеками обычное графическое приложение, запущенное из юзверя, работает.
« Последнее редактирование: Июнь 16, 2011, 10:14 от QuAzI » Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Июнь 16, 2011, 11:03 »

И где е лежит директория sqldrivers?
То же в C:/WINDOWS/system32 ?
Для плагинов в том числе и баз данных есть предопределенные места:
QTDIR/plugins
либо
app_Dir/plugins
Записан
QuAzI
Гость
« Ответ #2 : Июнь 16, 2011, 11:28 »

да, директория лежит в SYSTEM32 (т.е. в директории с выполняемой библиотечкой, при этом на момент запуска это же явдяется текущей рабочей директорией). Пробовал из директории либу кидать в SYSTEM32 без поддиректории, а так же в sqldrivers закидывать все библиотеки, которые для qsqlmysql4.dll нужны. Совершенно никакой реакции
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #3 : Июнь 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
Записан
QuAzI
Гость
« Ответ #4 : Июнь 18, 2011, 09:12 »

Плагин слинкован, плагин рабочий (используется в паре других приложений). Плагин ложу относительно исполняемого файла везде одинаково.
Задачу решил весьма тупо - вынес код работы с БД в отдельный exe и из DLL при событии запускаю этот exe с параметрами. Как ни крутил с qApp, QApplication, QCoreApplication, даже если драйвер показывается в списке доступных драйверов при перечислении и лежит правильно, всё равно он не подхватывается из DLL.
У меня Qt SDK 2010.05 (может быть в какой-то другой версии это и не так).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.138 секунд. Запросов: 19.