博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt使用.lib静态库和.dll动态库文件
阅读量:6674 次
发布时间:2019-06-25

本文共 2349 字,大约阅读时间需要 7 分钟。

我安装的环境是Qt_5_8_0_MSVC2015_64bit,或许不同环境下编译有所不同,我就我自己的安装环境进行叙述一下吧。

1.添加一个新项目,作为静态库项目

2.选择静态库,并完成就可以了

这时候发现生成的项目是个空项目,需要我们自己进行添加.h和.cpp文件,我们建立两个文件mylib.h和mylib.cpp文件,代码如下:

mylib.h

#ifndef _MYLIB_H_INCLUDE#define _MYLIB_H_INCLUDEextern "C" int TestSum(int a, int b);extern "C" void TestMessageBox();#endif // !_MYLIB_H_INCLUDE

mylib.cpp

#include "mylib.h"#include 
int TestSum(int a, int b){ return a + b;}void TestMessageBox(){ MessageBox(NULL, L"Hello", L"World", 0);}

编译生成动态库mylib.lib。

3.我们现在建立一个Qt GUI程序测试一下。

然后将main.cpp改为如下所示就可以了

#include "test.h"#include 
#include "../MyLib/mylib.h"#pragma comment(lib,"../x64/Debug/mylib.lib")//因为Qt的GUI程序有的不会加载user32.dll动态库,所以为了正常调用MessageBox需要显式加载user32.lib#pragma comment(lib,"user32.lib")int main(int argc, char *argv[]){ QApplication a(argc, argv); Test w; w.show(); TestSum(1, 2); TestMessageBox(); return a.exec();}

我们会看到程序执行调用了Windows API函数MessageBox。

4.我们这时候来测试一下动态库

新建一个动态库工程,更改dllmain.cpp如下:

#include "stdafx.h"#include 
extern "C" int __declspec(dllexport) Test(int a, int b);BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { MessageBox(NULL, L"Success", L"Load", 0); break; } case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE;}int Test(int a, int b){ return a + b;}

这个我们在一加载动态库时就可以弹出MessageBox,并导出了一个Test函数。

#include "test.h"#include 
#include
#include
#include "../MyLib/mylib.h"#pragma comment(lib,"../x64/Debug/mylib.lib")//因为Qt的GUI程序有的不会加载user32.dll动态库,所以为了正常调用MessageBox需要显式加载user32.lib#pragma comment(lib,"user32.lib")typedef int(*pfnTest)(int a, int b);//定义函数指针int main(int argc, char *argv[]){ QApplication a(argc, argv); Test w; w.show(); TestSum(1, 2); TestMessageBox(); //声明所需要加载的动态库 QLibrary mydll("../x64/Debug/mydll.dll"); //加载动态库 if (!mydll.load()) { QMessageBox::about(NULL, "Defeated", "Load"); } //获得Test导出函数地址 pfnTest Test = (pfnTest)mydll.resolve("Test"); int sum = Test(1, 2); return a.exec();}

转载于:https://www.cnblogs.com/Toring/p/6759718.html

你可能感兴趣的文章
Redis快速入门
查看>>
[杂谈]时光飞逝
查看>>
【wiggle-subsequence】leetcode-376
查看>>
订餐系统
查看>>
Quartz.NET总结(四)Quartz 远程调度
查看>>
开源虚拟化KVM(二)管理虚拟存储
查看>>
mysql数据库的主从复制脚本
查看>>
python入门——猜猜你来年的年龄
查看>>
centos 7安装搜狗输入法
查看>>
04软件需求读书笔记(四)
查看>>
魔法少女【动态规划问题】——NYOJ1204
查看>>
[转]xcode代码提示功能失效的解决方法
查看>>
查看手机信息、电池信息、电池记录、使用统计数据、WiFi 信息
查看>>
更新jar包中的MANIFEST.MF
查看>>
【8-23】node.js学习笔记
查看>>
实验吧flag整理
查看>>
HDU 1849 Rabbit and Grass
查看>>
iOS:原生二维码扫描
查看>>
JavaScript数据类型(转)
查看>>
Makefile: (实验) 目标命令的结束标志
查看>>