使用Qt Creator创建DLL
这里其实主要是针对Qt Creator的新手写的,下面以截图的方式进行讲解:
1.1、创建项目的时候选择,Library > C++库,然后点击“choose”按钮
1.2、选择“共享库”,输入DLL的名称,然后点击“下一步”按钮,接下来的页面默认下一步即可。
1.3、创建完后,工程目录结构如下
1.4、在DLL中写代码,示例代码如下:
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
1 #ifndef IAMDLL_H
2 #define IAMDLL_H
3
4 #include "iamdll_global.h"
5 #include <windows.h>
6
7 class IAMDLLSHARED_EXPORT IamDLL
8 {
9 public:
10 IamDLL();
11
12 /**
13 * @brief 求a+b的和
14 *
15 * @param a 入参a
16 * @param b 入参b
17 * @return int
18 */
19 int add(int a, int b);
20 };
21
22 /**
23 * @brief 求a*b
24 */
25 extern "C" int IAMDLLSHARED_EXPORT DoMult(int a, int b);
26 typedef int(WINAPI * LPFN_MULT)(int, int);
27
28 /**
29 * @brief 求a/b
30 */
31 extern "C" int IAMDLLSHARED_EXPORT DoDiv(int a, int b);
32 typedef int(WINAPI * LPFN_DIV)(int, int);
33
34 /**
35 * @brief 登陆参数
36 */
37 extern "C" std::string IAMDLLSHARED_EXPORT DoLogin(std::string user, std::string pswd);
38 typedef std::string(WINAPI * LPFN_LOGIN)(std::string, std::string);
39
40
41 #endif // IAMDLL_H
1.5、构建,然后会在默认生成的文件夹下生成几个文件:DLL文件,库文件(lib*.a)
加载DLL的三种方式
一、LoadLibrary方式
1 //方法壹:使用LoadLibrary
2 HINSTANCE hDll = LoadLibraryA("IamDLL");
3 if(hDll)
4 {
5 qDebug() << "\r\n";
6 qDebug() << "LoadLibraryA(\"IamDLL\") success!" ;
7
8 //使用GetProcAddress,获取指向要调用的导出函数的函数指针
9 LPFN_MULT pDoMult = (LPFN_MULT)GetProcAddress(hDll, ("DoMult"));
10 if(pDoMult)
11 {
12 qDebug() << "LoadLibraryA pDoMult: " << pDoMult(12, 3);
13 }
14 //
15 LPFN_DIV pDoDiv = (LPFN_DIV)GetProcAddress(hDll, ("DoDiv"));
16 if(pDoDiv)
17 {
18 qDebug() << "LoadLibraryA pDoDiv: " << pDoDiv(35, 5);
19 }
20 //
21 LPFN_LOGIN pDoLogin = (LPFN_LOGIN)GetProcAddress(hDll, ("DoLogin"));
22 if(pDoLogin)
23 {
24 qDebug() << "LoadLibraryA pDoLogin: " << pDoLogin("kandy", "admin").data();
25 }
26 FreeLibrary(hDll);
27 }
二、QLibrary方式
1 //方法贰:QLibrary方式
2 QLibrary qlib("IamDLL");
3 if(qlib.load())
4 {
5 qDebug() << "\r\n";
6 qDebug() << "qlib.load() success!" ;
7 LPFN_MULT pDoMult = (LPFN_MULT)qlib.resolve("DoMult");
8 if(pDoMult)
9 {
10 qDebug() << "qlib.load() pDoMult: " << pDoMult(12, 2);
11 }
12 //
13 LPFN_DIV pDoDiv = (LPFN_DIV)qlib.resolve("DoDiv");
14 if(pDoDiv)
15 {
16 qDebug() << "qlib.load() pDoDiv: " << pDoDiv(35, 7);
17 }
18 //
19 LPFN_LOGIN pDoLogin = (LPFN_LOGIN)qlib.resolve("DoLogin");
20 if(pDoLogin)
21 {
22 qDebug() << "qlib.load() pDoLogin: " << pDoLogin("zhouwei", "abc123").data();
23 }
24 qlib.unload();
25 }
三、静态链接的方式
1 //方法叁:使用静态链接方式(将IamDll生成的libIamDLL.a导入到本工程)
2 qDebug() << "\r\n";
3 IamDLL _IamDLL;
4 qDebug() << "IamDLL.add : " << _IamDLL.add(121, 123);
5
6 qDebug() << "DoMult : " << DoMult(12, 12);
7 qDebug() << "DoDiv : " << DoDiv(121, 11);
8 qDebug() << "DoLogin : " << DoLogin("hello", "test").data(
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓