qt dll的创建和使用

来源:互联网 发布:工作日志软件哪个好 编辑:程序博客网 时间:2024/05/20 05:26

这些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 namespaceWorkStation::database;

 

classDATABASE_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中的导出类

      classDATABASE_EXPORTDatabaseManage :publicQObject

      {

      public:

         static DatabaseManage*Instance();

         bool CheckCreateGlobal();

         void Initialization(QString const& userName);

         bool GetDB(const QString&strPluginName, constQString& 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;

               

      };

 

   }

 


 

0 0
原创粉丝点击