- Interops (LIB)
- XModule (DLL, включает QWidget) {с использованием Interops
- Main App (EXE) {с использованием Interops, XModule
Использование класса «LogManager» в «Основном приложении» работает нормально, но в XModule (который также используется в «Основном приложении») во время выполнения QSqlQuery выдаются странные исключения, и его невозможно отладить. Я думаю, что динамически подключаемая DLL не может загрузить драйверы SQL Qt, но я не знаю, как это исправить.
Кстати, все проекты используют модуль SQL Qt. Спасибо.
Два примера функции: которые работают в MainApp, но не в XModule. Вызывает строку QString val = q.value(0).toString(); в функции getLastDbLogDate(). Также я передаю указатель экземпляра LogManager повсюду, который находится в MainApp.
bool LogManager::connect()
{
if(!QSqlDatabase::contains(LOG_DB_NAME))
{
QSqlDatabase db = QSqlDatabase::addDatabase(mDriver, LOG_DB_NAME);
if(!db.isValid())
return false;
db.setHostName(mHost);
db.setPort(mPort);
db.setDatabaseName(mDb);
db.setUserName(mUser);
db.setPassword(mPw);
return db.open();
}
return true;
}
QDateTime LogManager::getLastDbLogDate()
{
if(!connect())
QDateTime();
QSqlQuery q("SELECT MAX(logTime) FROM tbl_logs", QSqlDatabase::database(LOG_DB_NAME));
while (q.next())
{
QString val = q.value(0).toString();
return QDateTime::fromString(val, LOG_DATE_SQL_FORMAT);
}
return QDateTime();
}
звоню как везде:
mLogMgr->getLastDbLogDate();
Подробнее здесь: https://stackoverflow.com/questions/325 ... dll-module
Мобильная версия