Qt 一步一步实现dll调用(附源码)

来源:互联网 发布:大米护肤品怎么样知乎 编辑:程序博客网 时间:2024/05/16 06:30

前言:从上个月底因为新项目统一平台需要用Qt开发,就开始研究Qt,但是一直感觉没有入门,不知道为什么,很多功能实现了,但是知其然不知其所以然,就像现在设计的项目

使用插件进行开发,做软件开发大体都知道什么事插件式开发,以前c#也用过,但是Qt插件开发还是第一次,百度了很久终于实现,这里记录下!这里不讲原理直接讲过程,高手绕行。。。

第一部分

建立插件程序实现2个功能

(1)创建一个加法函数供主程序进行动态调用

(2)创建一个查询页面供主程序进行动态调用

第一步创建插件程序

打开文件菜单-》新建文件或项目-》选择other project -》C++库如图

点击Choose进入如图

 

选择共享库-》输入名称-》选择你工程位置

 

点击下一步选择工程需要模块点击下一步完成

完成后你会发现工程有2个头文件和一个源文件

这里点击新建文件添加一个新建文件

新建文件-》Qt-》Qt设计类-》选择dialog-》输入名称

如图

头文件

MYTESTDLL_GLOBAL_H

View Code

MYSHOWTEST_H

复制代码
#ifndef MYSHOWTEST_H#define MYSHOWTEST_H#include <QDialog>namespace Ui {    class MyShowTest;}class MyShowTest : public QDialog{    Q_OBJECTpublic:    explicit MyShowTest(QWidget *parent = 0);    ~MyShowTest();private:    Ui::MyShowTest *ui;};#endif // MYSHOWTEST_H
复制代码

MYTESTDLL_H

复制代码
#ifndef MYTESTDLL_H#define MYTESTDLL_H#include "MyTestDll_global.h"#include "qdialog.h"class MYTESTDLLSHARED_EXPORT MyTestDll {public:    MyTestDll();};extern "C" Q_DECL_EXPORT int add(int a,int b);extern "C" Q_DECL_EXPORT QDialog *showDialog();#endif // MYTESTDLL_H
复制代码

源文件
MyShowTest.cpp

复制代码
#include "myshowtest.h"#include "ui_myshowtest.h"MyShowTest::MyShowTest(QWidget *parent) :    QDialog(parent),    ui(new Ui::MyShowTest){    ui->setupUi(this);}MyShowTest::~MyShowTest(){    delete ui;}
复制代码

MyTestDll.cpp

复制代码
#include "mytestdll.h"#include "MyShowTest.h"MyTestDll::MyTestDll(){}int add(int a,int b){  return a+b;}QDialog *showDialog(){    MyShowTest *ss=new MyShowTest();    return ss;}
复制代码

ui

点击构建项目完成插件。

第二部分

新建一个主程序如图

把生成的插件mytestdll.dll放入mytest.exe相同目录

头文件

复制代码
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>namespace Ui {    class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow();private:    Ui::MainWindow *ui;private slots:    void on_pushButton_2_clicked();    void on_pushButton_clicked();};#endif // MAINWINDOW_H
复制代码

源文件

View Code
复制代码
#include "mainwindow.h"#include "ui_mainwindow.h"#include "qlibrary.h"#include "qmessagebox.h"#include "string.h"MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);}MainWindow::~MainWindow(){    delete ui;}typedef int (*Fun)(int,int); //定义函数指针,以备调用void MainWindow::on_pushButton_clicked(){   QLibrary mylib("MyTestDll.dll");   //声明所用到的dll文件   int result;   QString sresult;   if (mylib.load())              //判断是否正确加载   {       Fun open=(Fun)mylib.resolve("add");    //援引 add() 函数       if (open)                  //是否成功连接上 add() 函数       {            int s1=this->ui->lineEdit->text().toInt();            int s2=this->ui->lineEdit_2->text().toInt();            result=open(s1,s2);      //这里函数指针调用dll中的 add() 函数            sresult=QString::number(result);            this->ui->lineEdit_3->setText(sresult);       }   }   else   {       QMessageBox::information(NULL,"NO","DLL is not loaded!");   }}typedef QDialog *(*Funs)(); //定义函数指针,以备调用void MainWindow::on_pushButton_2_clicked(){   //加载插件   QLibrary mylib("MyTestDll.dll");   //声明所用到的dll文件   if (mylib.load())              //判断是否正确加载   {       Funs open=(Funs)mylib.resolve("showDialog");    //援引 add() 函数       if (open)                  //是否成功连接上 add() 函数       {           QDialog *form1= open();           form1->show();        }    }}
复制代码


效果如图

完成预定2个功能

源码下载:http://download.csdn.net/detail/huangyuancao/5023059

ps:博客园怎么提供源码下载呢。。。




from:  http://www.cnblogs.com/newstart/archive/2013/01/23/2873611.html

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头发总是大把大把的得掉 怎么办 严重脱发怎么办去问南宁肤康 脱发严重怎么办去看南宁肤康 前额头发少怎么办 如何使头发增多 生完宝宝头发一把一把的掉怎么办 生完宝宝后头发掉的厉害怎么办 生完宝宝头发掉的厉害怎么办 生了小孩后头发掉很多怎么办 生了孩子头发掉的很厉害怎么办 母乳期头发掉的很厉害怎么办 宝宝吃母乳头发掉的厉害怎么办 头发油腻头皮屑多还掉头发怎么办 头发剪了中分刘海弯了怎么办 头发掉了长出来的头发很细怎么办? 头皮损伤毛囊怎么办还会长头发吗 一岁宝宝头发稀少怎么办能刮光头么 前编头发长了怎么办怎么梳理 九个月宝宝头发稀少不长怎么办 前牙吃饭咬合很深吃饭就痛怎么办 吃了甜的冷的就牙疼怎么办 吃热的凉的甜的牙疼怎么办 头发太细了想让头发变粗点怎么办 我的头发又少又很油该怎么办 头发油掉发头顶头发稀疏怎么办 我的头发天生就少又细怎么办 头发越来越少怎么办 用什么好呢 头发油掉头发怎么办吃什么药好 生完孩子三个月掉头发很厉害怎么办 电夹板夹头发现在掉头发怎么办 刚剪完的头发前面短后面长怎么办 头发太多太厚怎么办_百度经验 米诺地尔搽剂喷在头皮上痛怎么办 米诺地尔擦了头皮痒怎么办 头发又细又少一天不洗就油怎么办 头又尖头发又细又少不知怎么办 蘑菇头发型留长尴尬期怎么办 月经期间洗了下头量很少了怎么办 宝宝喝了有沐浴露的洗澡水怎么办 4个月宝宝头发长的慢怎么办 宝宝不小心吃了自己拉的屎怎么办 手机不小心弄成耳机模式怎么办