我的解决方案中有3个不同的项目
Interops(LIB)
XModule(DLL,包含QWidget){使用Interops}
主要应用程序(EXE){使用Interops,XModule}
我在Interops项目中创建了一个logger类作为“LogManager”,它连接到MySQL以定期将日志写入数据库。
在“主应用程序”中使用“LogManager”类可以,但在XModule(也在“主应用程序”中使用)中,在QSqlQuery
执行期间抛出奇怪的异常并且它是不可调试的。我认为动态链接的DLL无法加载Qt的SQL驱动程序,但我不知道如何修复。
BTW使用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();