qt dll的创建和使用
2016-03-30 15:26
387 查看
这些dll和lib都是qt的dll和lib库,
因为这些dll中都有如下文件,
test_qt_lib_global.h
#include <QtCore/qglobal.h>
#ifdef DATABASE_LIB
# define DATABASE_EXPORTQ_DECL_EXPORT
#else
# define DATABASE_EXPORT Q_DECL_IMPORT
#endif
#include "database_global.h"
namespace WorkStation{
namespacedatabase{
/*
数据库管理类:增删改查等
*/
classDATABASE_EXPORT DatabaseManage : public QObject
//将该类DatabaseManage从dll导出,供其他类使用
//其他类开始使用dll中导出的类
#include
"Database\DatabaseManage.h"
m_spSettingsdb =
DatabaseManage::Instance()->GetAppSettingsDb();
#ifndef
DATABASE_GLOBAL_H
#define
DATABASE_GLOBAL_H
#include
<QtCore/qglobal.h>
#ifdefDATABASE_LIB
# define
DATABASE_EXPORT Q_DECL_EXPORT
#else
# define
DATABASE_EXPORT Q_DECL_IMPORT
#endif
#endif
// DATABASE_GLOBAL_H
//导出database.dll
#ifndef
DATABASE_H
#define
DATABASE_H
#include
"database_global.h"
#include
"DatabaseManage.h"
using namespace
WorkStation::database;
class
DATABASE_EXPORT Database
{
public:
Database();
~Database();
private:
};
extern
"C" DATABASE_EXPORTDatabaseManage*
GetDatabaseManage();
#endif
// DATABASE_H
//cpp文件
//返回一个DatabaseManage*
DatabaseManage*
GetDatabaseManage()
{
return
DatabaseManage::Instance();
}
DatabaseHelper::DatabaseHelper():m_DatabaseManage(NULL)
{
QDir
appDir(QCoreApplication::applicationDirPath());
QString
dllPath = appDir.absoluteFilePath("Database.dll");
m_DatabaseLib.setFileName(dllPath);
if(m_DatabaseLib.load())
{
//database.dll中,有导出该方法,GetDatabaseManage()
/*
class DATABASE_EXPORT Database
{
public:
Database();
~Database();
private:
};
extern "C" DATABASE_EXPORT DatabaseManage*GetDatabaseManage();
DatabaseManage* GetDatabaseManage()
{
return DatabaseManage::Instance();
}
*/
//详见database.h头文件该头文件是qt创建dll时候,自动命名的头文件,跟工程名字database相同
GetDatabase
GetDatabaseManage= (GetDatabase)m_DatabaseLib.resolve("GetDatabaseManage");
if(GetDatabaseManage)
{
//返回一个DatabaseManage*
m_DatabaseManage =
GetDatabaseManage();//GetDatabaseManage()返回DatabaseManage::Instance();
}
}
}
//以后,直接使用DatabaseManage这个类,去操作数据库
DatabaseHelper::Instance()->GetDatabaseManage()->CheckCreateGlobal();
bool
DatabaseManage::CheckCreateGlobal()
{
return
GetSystemDb()->CheckSystemDb();
}
/*
数据库管理类:增删改查等
*/
///database.dll中的导出类
class
DATABASE_EXPORTDatabaseManage :
publicQObject
{
public:
static
DatabaseManage*Instance();
bool
CheckCreateGlobal();
void
Initialization(QString
const& userName);
bool
GetDB(const QString&
strPluginName, const
QString& strDBName,QSqlDatabase&
dataBase);
QSharedPointer<SystemDb>GetSystemDb();//新建一个SystemDb实例
QSharedPointer<SettingsInterface>GetAppSettingsDb();
QSharedPointer<SettingsInterface>GetUserConfigDb();
QSharedPointer<MsgInterface>GetMsgDb();
private:
DatabaseManage(QObject*parent);
~DatabaseManage();
private:
static
DatabaseManage* m_instance;
QSharedPointer<SqliteDatabase>
m_spSqlite;
QSharedPointer<SystemDb>
m_spSystemdb;
QSharedPointer<SettingsInterface>
m_spAppSettingsDb;
QSharedPointer<SettingsInterface>
m_spUserConfigDb;
QSharedPointer<MsgInterface>
m_spMsgDb;
QString
m_UserName;
};
}
因为这些dll中都有如下文件,
test_qt_lib_global.h
#include <QtCore/qglobal.h>
#ifdef DATABASE_LIB
# define DATABASE_EXPORTQ_DECL_EXPORT
#else
# define DATABASE_EXPORT Q_DECL_IMPORT
#endif
#include "database_global.h"
namespace WorkStation{
namespacedatabase{
/*
数据库管理类:增删改查等
*/
classDATABASE_EXPORT DatabaseManage : public QObject
//将该类DatabaseManage从dll导出,供其他类使用
//其他类开始使用dll中导出的类
#include
"Database\DatabaseManage.h"
m_spSettingsdb =
DatabaseManage::Instance()->GetAppSettingsDb();
#ifndef
DATABASE_GLOBAL_H
#define
DATABASE_GLOBAL_H
#include
<QtCore/qglobal.h>
#ifdefDATABASE_LIB
# define
DATABASE_EXPORT Q_DECL_EXPORT
#else
# define
DATABASE_EXPORT Q_DECL_IMPORT
#endif
#endif
// DATABASE_GLOBAL_H
//导出database.dll
#ifndef
DATABASE_H
#define
DATABASE_H
#include
"database_global.h"
#include
"DatabaseManage.h"
using namespace
WorkStation::database;
class
DATABASE_EXPORT Database
{
public:
Database();
~Database();
private:
};
extern
"C" DATABASE_EXPORTDatabaseManage*
GetDatabaseManage();
#endif
// DATABASE_H
//cpp文件
//返回一个DatabaseManage*
DatabaseManage*
GetDatabaseManage()
{
return
DatabaseManage::Instance();
}
DatabaseHelper::DatabaseHelper():m_DatabaseManage(NULL)
{
QDir
appDir(QCoreApplication::applicationDirPath());
QString
dllPath = appDir.absoluteFilePath("Database.dll");
m_DatabaseLib.setFileName(dllPath);
if(m_DatabaseLib.load())
{
//database.dll中,有导出该方法,GetDatabaseManage()
/*
class DATABASE_EXPORT Database
{
public:
Database();
~Database();
private:
};
extern "C" DATABASE_EXPORT DatabaseManage*GetDatabaseManage();
DatabaseManage* GetDatabaseManage()
{
return DatabaseManage::Instance();
}
*/
//详见database.h头文件该头文件是qt创建dll时候,自动命名的头文件,跟工程名字database相同
GetDatabase
GetDatabaseManage= (GetDatabase)m_DatabaseLib.resolve("GetDatabaseManage");
if(GetDatabaseManage)
{
//返回一个DatabaseManage*
m_DatabaseManage =
GetDatabaseManage();//GetDatabaseManage()返回DatabaseManage::Instance();
}
}
}
//以后,直接使用DatabaseManage这个类,去操作数据库
DatabaseHelper::Instance()->GetDatabaseManage()->CheckCreateGlobal();
bool
DatabaseManage::CheckCreateGlobal()
{
return
GetSystemDb()->CheckSystemDb();
}
/*
数据库管理类:增删改查等
*/
///database.dll中的导出类
class
DATABASE_EXPORTDatabaseManage :
publicQObject
{
public:
static
DatabaseManage*Instance();
bool
CheckCreateGlobal();
void
Initialization(QString
const& userName);
bool
GetDB(const QString&
strPluginName, const
QString& strDBName,QSqlDatabase&
dataBase);
QSharedPointer<SystemDb>GetSystemDb();//新建一个SystemDb实例
QSharedPointer<SettingsInterface>GetAppSettingsDb();
QSharedPointer<SettingsInterface>GetUserConfigDb();
QSharedPointer<MsgInterface>GetMsgDb();
private:
DatabaseManage(QObject*parent);
~DatabaseManage();
private:
static
DatabaseManage* m_instance;
QSharedPointer<SqliteDatabase>
m_spSqlite;
QSharedPointer<SystemDb>
m_spSystemdb;
QSharedPointer<SettingsInterface>
m_spAppSettingsDb;
QSharedPointer<SettingsInterface>
m_spUserConfigDb;
QSharedPointer<MsgInterface>
m_spMsgDb;
QString
m_UserName;
};
}
相关文章推荐
- QT:Ubuntu下 嵌入式Qt开发环境的搭建
- QT编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)
- apt-get依赖库版本过高问题的解决(如何处理libqt4-dev在ubuntu的安装问题)
- Qt实现菜单栏,工具栏,状态栏
- VS 下Qt工程不能生成moc文件的解决方法
- Qt生产者消费者实验:等待条件QWaitCondition
- Qt编程思路困惑1
- Arm开发板+Qt学习之路
- Qt 学习之路 2(38):存储容器
- Jetson TK1开发环境搭建(五)编译Qt 5.5.1 Qt Creator3.6.0
- Jetson TK1开发环境搭建(四)编译Qt 5.5.1
- Qt13 Creating connection open and close function with sqlite database
- QT12 How to open a new window after successful Login
- QT11 How to set image with QLabel in Qt
- QT 简单编写贪吃蛇
- QT7 How to connect Qt to SQLite
- Qt提取EXE文件的大图标
- 关于QT5 Failed to find or load platform plugin "windows" 问题
- QT隐藏鼠标
- Qt编译qsqlmysql.dll插件