1 引言
静态链接库是在编译时被链接到程序中的库文件,在编译时,链接器将静态链接库的代码和数据复制到最终的可执行文件中。动态链接库是在程序运行时加载的库文件,在编译时,可执行文件只包含对动态链接库的引用,而不包含实际的库代码和数据。静态链接库占更多存储内存,程序比较大;动态链接库占更多运行内存。
2 动态链接库封装步骤
① 新建一个“封装”工程,取名为DLLPackage。
② 新建一个头文件和一个源文件。
③ 在头文件声明动态链接库的导入或者导出以及DLL里面可调用的函数
代码解释说明:
- #pragma once的作用:用于确保头文件只被编译一次。
- 如果在源文件中定义了宏MyDLL_EXPORT,则导出动态链接库,供其它程序调用;如果没有定义宏MyDLL_EXPORT ,则导入动态链接库,调用动态链接库的函数。此时源文件中未定义宏MyDLL_EXPORT,所以代码的高亮部分是else里面的内容。
- 在MyDLL中声明一个加法函数add。
- 在MyDLL中声明一个类MyFun,类里面减法函数substration。注:声明的时候class在MyDLL前,否则会报错。
④ 源文件中定义宏以及对应的函数和类
代码解释说明:
- 定义宏 MyDLL_EXPORT,此时头文件中高亮的是if里面的内容
- 包含头文件,注:必须先定义宏,再#include头文件
- int add() 定义一个加法函数
- int MyFun::subtraction定义类里面的一个减法函数
⑤ 生成动态链接库
(1)右键项目,选择属性
(2)将配置类型改成动态库(.dll),同时可设置动态链接库的输出路径,不设置则输出至默认路径
(3)点击生成解决方案。
3 动态链接库调用步骤
3.1 调用简介
调用动态链接库需要三个文件:
- ① 头文件(.h)
- ② .dll
- ③ .lib
3.2 调用步骤
② 将动态链接库的头文件放到DLLCall工程里。
③ 将.dll文件和.lib文件放到.exe的同目录下。比如设置的是Debug+x64,就放在x64/Debug路径下(路径查找可参考博文VS里面执行文件默认存放路径梳理——C++语言-CSDN博客)。
④ 链接到动态链接库的路径,在附加库目录里添加.dll和.lib文件的存放目录
⑤ 附加依赖项里添加.lib文件的名称
⑥ 在头文件里#include动态链接库的头文件。
⑦ 测试验证
运行结果如下:
4 其它小技巧
介绍一种动态链接库封装和调用联动小技巧 。上述步骤每次“封装” 工程生成的动态链接库,都需要手动复制到“调用”工程的exe文件的同目录下,为了更加方便地操作,可以将生成动态链接库的输出路径设置成“调用”的exe文件的同目录,这样当“封装”里的头文件不变时,更改代码后,点击一下“封装”里的生成,就可以在“调用”里面运行了,可以大大提高调试效率