当前位置: 首页 > news >正文

外部DLL创建及使用

1. 静态链接库和动态链接库区别

  • 静态链接库中不能再包含其他的动态链接库或者静态链接库;
  • 动态链接库中还可以包含其他的动态或静态链接库。

2. 简单说明一些库的作用

  • kernel32.dll主要处理内存管理和进程调度;
  • user32.dll主要控制用户界面;
  • gdi32.dll负责图形方面的操作;

3. VC++支持的三种DLL

- `Non-MFC DLL`:非MFC动态库,不采用MFC类库结构,导出函数为标准的C接口,能被非MFC或MFC编写的应用程序锁调用;
- `MFC Regular DLL`:MFC规则DLL,包含一个继承自CWinApp的类,没有消息循环;
- `MFC Extension DLL`:MFC扩展DLL,采用MFC的动态链接版本创建,只能被MFC类库编写的应用程序调用;

4. 库的调试

在使用的地方打断点,运行到该出时按F11可以进入库中的函数进行调试。

5. 在函数名前面添加__declspec(dllexport)声明函数为DLL的导出函数

6.VS中动态链接库的使用方法

动态调用

  1. 首先使用typedef定义一个与函数参数类型和返回值均相同的函数指针类型;
typedef 函数返回类型 (*自定义函数指针名字)(参数列表);
  1. 其次,定义一个HINSTANCE句柄,通过Loadibrary动态加载dll模块
HINSTANCE hDLL = LoadLibrary("dll名字");
  1. 再次,使用GetProcAddress加载函数
自定义函数指针名 自定义函数 = GetProcAddress("函数名");
  1. 最后,使用FreeLibrary()释放DLL模块。
FreeLibrary(hDll);

静态调用

#pragma comment(lib,"lib名字")
extern "C" _declspec(dllimport) 函数名(参数列表);

7. 声明导出函数

既可以用_declspec(dllexport),也可以采用模块定义文件声明.def。
示例:
;lib.def:导出函数
LIBRARY dllTest ;说明文件相应的dll
EXPORT ;列出要导出函数的名称
add @ 1

8. 声明类和导出类

#ifdef DLL_FILE
class _declspec(dllexport) class_name  //导出类
#else
class _declspec(dllimport) class_name //导入类

9. QT中静态链接调用

  1. .pro文件中把..h.lib文件包含进去,.cpp头文件中include依赖库头文件;
  2. 调用外部dll中的方法;

10. QT中共享链接/动态链接调用

.cpp中增加#include <QLibrary>

示例:

#include <QCoreApplication>
#include <QLibrary>  // 引入QLibrary类
#include <iostream>typedef int (*Add)(int a,int b);  // 定义函数指针
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QLibrary mylib("MyLib1.dll");if(!mylib.load())  // 加载dll{std::cout << "Load Library Failed" << std::endl;return -1;}Add add = (Add)mylib.resolve("add");  // 定义函数指针对象if(0 == add){std::cout << "Load Function Failed" << std::endl;return -2;}int sum = add(1,2);  // 使用std::cout << "sum=" << sum <<std::endl;return a.exec();
}
http://www.xdnf.cn/news/1146079.html

相关文章:

  • UVC for USBCamera in Android - 篇二
  • 腾讯 ChatBI 调研
  • 如何为“地方升学导向型”语校建模?Prompt 框架下的宇都宫日建工科专门学校解析(7 / 500)
  • Java HashMap高频面试题深度解析
  • 对于编码电机-520直流减速电机
  • 【AI News | 20250717】每日AI进展
  • 3.3 参数传递方式
  • 应用集成体系深度解析:从数据互通到流程协同
  • 20250718【顺着234回文链表做两题反转】Leetcodehot100之20692【直接过12明天吧】今天计划
  • Machine Learning HW2 report:语音辨识(Hongyi Lee)
  • 操作系统-处理机调度和死锁进程同步
  • 全球天气预报5天(经纬度版)免费API接口教程
  • HarmonyOS-ArkUI Web控件基础铺垫4--TCP协议- 断联-四次挥手解析
  • 70 gdb attach $pid, process 2021 is already traced by process 2019
  • postman接口测试,1个参数有好几个值的时候如何测试比较简单快速?
  • PPIO × Lemon AI:一键解锁全流程自动化开发能力
  • 【DataWhale】快乐学习大模型 | 202507,Task03笔记
  • 机械材料计算软件,快速核算重量
  • Python暑期学习笔记5
  • Excel导出实战:从入门到精通 - 构建专业级数据报表的完整指南
  • Nestjs框架: 基于TypeORM的多租户功能集成和优化
  • 多线程-4-线程池
  • 锁步核,为什么叫锁步核?
  • Android性能优化之启动优化
  • leetcode15.三数之和题解:逻辑清晰带你分析
  • RPG60.生成可拾取物品
  • camera2 outputbuffer的流转过程
  • 2025外卖江湖:巨头争霸,谁主沉浮?
  • python网络爬虫(第三章/共三章:驱动浏览器窗口界面,网页元素定位,模拟用户交互(输入操作、点击操作、文件上传),浏览器窗口切换,循环爬取存储)
  • 某邮生活旋转验证码逆向