qt 制作dll 插件

dll可以让我们将部分功能封装起来,模块化,有效的避免了当功能模块某一部分出问题,或者需要修改的时候,不得不去重编译整个项目的问题,还可以被其它程序使用。


基础类(用于提供接口):

#ifndef TOOLMANAGEBASE_H
#define TOOLMANAGEBASE_H

#include <QString>
#include <QLibrary>

//工具管理类
class ToolManageBase
{
public:
    virtual int RunTool(QString strtoolname,QString cmd = "") = 0;   //运行工具
    virtual int CloseAllTool() = 0;                                 //关闭所有工具
    virtual int CheckToolNum(QString toolguid) = 0;                 //指定工具类型的运行数量
    virtual int GetToolTypeNumber() = 0;                            //返回工具的种类
};
#endif // TOOLMANAGE_H

具体实现类:

.h文件

/*************************************************************
*文件名:toolmanage.h
*内容摘要:工具管理类头文件
*************************************************************/

#ifndef TOOLMANAGE_H
#define TOOLMANAGE_H

#include <QString>
#include <list>
#include <QProcess>
#include "tool.h"
#include <QDomDocument>
#include <QTextStream>
#include <QFile>

#include "../include/toolmanagebase.h"
#include "toolmanage_global.h"

typedef struct  toolinfor
{
    QString name;
    QString guid;
    QString path;
    int type;
} ToolInfor;




//工具管理类
class Toolmanage : public ToolManageBase
{
public:
    Toolmanage();                                           //构造函数
    int RunTool(QString toolguid,QString cmd = "");                          //运行工具
    int CloseAllTool();                                     //关闭所有工具
    int CheckToolNum(QString toolguid);                     //查看工具类型
    int GetToolTypeNumber();                                //查看工具类型数量


private:
    void readtoolinfor(QString path);                       //读取工具信息
    std::list<Tool> m_tools_list;                           //工具进程管理链表
    std::list<ToolInfor> m_toolsinfor_list;
};

//用于获取对象
extern "C" TOOLMANAGESHARED_EXPORT ToolManageBase* getInstance()
{
    return new Toolmanage();
}


#endif // TOOLMANAGE_H


dll全局文件:

#ifndef TOOLMANAGE_GLOBAL_H
#define TOOLMANAGE_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(TOOLMANAGE_LIBRARY)
#  define TOOLMANAGESHARED_EXPORT Q_DECL_EXPORT
#else
#  define TOOLMANAGESHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // TOOLMANAGE_GLOBAL_H


加载:

最好使用绝对路径或者相对路径来寻找dll,防止因路径出错而加载失败


    typedef ToolManageBase* (*Fun)();
    m_mylib = new QLibrary(QApplication::applicationDirPath() + "\\toolmanage.dll");
    if(m_mylib->load())
    {
        Fun pfun= (Fun)m_mylib->resolve("getInstance");
        m_toolmanage = pfun();
        
    }
    else
        //失败要进行提示



使用:

int ToolManage::GetToolTypeNumber()  
{  
    if(m_toolmanage != NULL)  
    {   
        return m_toolmanage->GetToolTypeNumber();  
    }  
    else   
        return -1;  
}





卸载:

    if(m_toolmanage != NULL)
        m_toolmanage->CloseAllTool();
    if(m_mylib!= NULL)
    {
        m_mylib->unload();
        delete m_mylib;
    }





  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值