qt dll的创建和使用

本文介绍了如何创建和使用Qt的动态链接库(dll)。通过示例代码展示了如何定义和导出dll中的类,以及如何在主应用程序中加载和使用dll中的方法,涉及的关键概念包括Q_DECL_EXPORT和Q_DECL_IMPORT宏,以及动态库的加载和解析。

这些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;

               

      };

 

   }

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值