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
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
源文件
#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
- Qt 一步一步实现dll调用(附源码)
- Qt一步一步实现插件调用(附源码)、Qt一步一步实现插件通信(附源码)
- Qt一步一步实现插件调用(附源码)
- Qt一步一步实现插件通信(附源码)
- QT实现五子棋(附源码)
- Qt之一步一步实现插件调用
- .NET 调用DLL实现(带源码)
- QT实现串口通信(附源码下载)
- QT调用QT Dll
- Qt之QLineEdit详解(附源码)
- 用QT实现Wake On Lan功能(附全部程序源码)
- java调用webservice(附源码)
- QT生成DLL,调用DLL
- QT生成DLL,调用DLL
- QT生成DLL,调用DLL
- 可以供MFC调用的,QT实现的DLL(qtwinmigrate实现)
- Qt调用DLL
- Qt调用vc dll
- cmd常用命令及操作
- 2016.4.10 第一次测试选择题
- Qt一步一步实现插件通信(附源码)
- JavaScript 计时事件
- csv导入oracle数据库
- Qt 一步一步实现dll调用(附源码)
- 天猫开店流程及费用,怎么计算天猫店铺的开店成本?
- LeetCode *** 19. Remove Nth Node From End of List
- [从头学数学] 第170节 空间几何体
- WeChall Exploit writeup
- mysql的表名/字段名/字段值是否区分大小写
- Zookeeper 3.4 官方文档翻译
- SQL注入初了解
- krpano 教程 - image标签中文说明