认识DLL动态链接库,以及如何用VS创建并调用一个DLL

认识DLL动态链接库

DLL是安全人不可缺少的一项技能

要认识动态链接库,首先要认识库这一概念:简单来说,库就是能够提供给使用者包含一些开箱即用的变量、函数或类的可执行代码的二进制形式,它可以被操作系统载入内存执行。

库分为两种,静态库(windows中后缀.lib)与动态库(win中后缀.dll)

这两类库的区别体现在程序的链接阶段:静态库在程序的链接阶段被直接复制到了程序中;动态库则没有,而是在程序运行时由系统动态加载到内存中供程序调用。

由此,动态链接库的优势体现了出来,那就是它相比于静态链接库来说非常节省内存,在程序运行时只需要动态加载一次即可,这也是如今动态链接库被高频使用在大型软件中的原因(用户在更新时只需要更新动态库即可,增量更新)。

实现工具:Visual Studio 2022

编程实现Dll

在此我们编写两个函数,一个函数返回斐波那契数列前n项之和,另一个函数返回输入值的阶乘

打开vs创建dll动态链接库新项目,项目名为Dll1

 

之后分别添加头文件mydll.h和源文件mydll.cpp

 

 

编写头文件:

 在编写头文件时,通常都会加第3,4行代码,这是为了防止头文件的重复调用;由于要用C编写函数代码,所以要用exturn “C”声明在链接时使用C库函数规范来链接。在函数定义前面的__declspec(dllexport)用于导出符号,也就是定义该函数的dll;

编写源文件:

编写实现输出斐波那契数列前N项和的函数Fibonacci_Sum()

 (注意在文件头要加上刚才编写好的头文件,这样编写好的函数才能被导出为dll)

编写返回输入值阶乘的函数Factorial()

 

编写完成,右键项目生成方案:

 

 

 

编程,调用实现的DLL

添加新项目,选择控制台应用

 

由于要调用DLL,所以需要设置此项目的属性:

首先,由于需要包括mydll.h这个头文件,需要在包含路径中设置:

 

 

 

其次,需要引入lib符号文件:

在链接器属性一栏中添加符号文件作为依赖项

 

然后给符号文件添加搜索路径:

 

 

最后,添加源文件编写调用代码调用DLL:

 调用代码分别调用了两个函数,分别输出前5项斐波那契数列之和以及5的阶乘:

 

调用成功!