Windows下动态链接库简单介绍

动态链接库

当我们使用动态链接库时,一般需要 dll lib 头文件。当程序编译时需要lib文件和头文件。一旦编译完成程序只需要dll就可以运行(可以根据这个原理,减少程序发布包的体积)

如何制作动态链接库(关键点)

(可能并不好,但我就是这么做的)

  1. 新建一个空项目(别问我什么不从 动态链接库模板开始,我也忘记我是从哪里学的了)
  2. 修改此工程属性,确保它能生成动态链接库 一. 项目 → 项目属性 → 常规 → 配置类型 修改为动态库。二. 项目属性 → 高级→ 目标文件扩展名 修改为 .dll。三. 项目属性 → C/C++ → 预处理器→预处理器定义 删除 CONSOLE这个预定义
#ifndef MyToolLibrary
#define MyToolDll __declspec(dllimport)
#else
#define MyToolDll __declspec(dllexport)
#endif

导出符号和引入符号的宏定义,注意是两个下划线。导出整个类需要把 导出宏放在 class 和 类名之间。需要导出函数时需要放在被导出函数定义返回值的左边(因为这是微软规定的)使用 __declspec(dllexport) 从 DLL 导出

如何查看是否导出成功

Let’s make dependency walker fast again!

如何使用动态链接库

有隐式加载和显式加载两种方法。

  1. 隐式加载,只需要 dll 文件。
  2. 显式加载,编译时需要 lib 文件 头文件,运行时需要 dll 文件

解决导出符号改编的问题

这个主要用于 C 和 C++,dll 和应用程序相互调用的情况,C的编译器不存在函数改编的问题,而C++的编译器存在函数改编的问题。因为C++是支持函数重载的

//解决C++编译器导出符号存在函数名称改编的问题
extern "C" __declspec(dllexport)
extern "C" __declspec(dllimport)

使用动态链接库的好处

如果有多个进程需要加载相同的动态链接库,那么只需要加载一份就可以了。这样可以减轻体积

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值