动态链接库入门

本文介绍了动态链接库(DLL)的基本概念,包括其作为独立文件存储可重用代码和资源,与静态链接的区别,以及动态链接库的优点如代码共享、跨语言调用、内存效率和隐藏扩展性。还提到了DLL在Windows操作系统中的应用和二次开发价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简单认识动态链接库(DLL)

动态链接库是一个独立的文件,其中包含能被可执行程序或其他DLL文件调用来完成某项工作的函数,动态链接库通常不能直接运行,只有在其他模块调用动态链接库中的函数时,它才能发挥作用。在实际编程时,我们可以把完成某种功能的函数放在一个动态链接库中,提供给其他程序调用。

通俗来讲,DLL就是一个仓库,提供一些可以直接拿来用的变量、函数或者类。
整个Windows操作系统就是由大量DLL组成的,DLL不仅可以存储函数代码,也可以存储图标、位图等资源文件。

二、动态链接库

动态链接时相对于静态链接而言的。在DOS时代,可执行文件中调用的函数都是静态链接的,这些函数主要是编程语言提供的库函数。函数和数据被编译进一个二进制文件中(扩展名为.LIB),在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.exe文件)。当发布产品时,只需要发布这个可执行文件即可,并不需要发布被使用的静态库。这就是所谓的静态链接

所谓动态链接,就是执行文件中不再包含调用函数的代码,其中包含的是被调用函数所属的链接库文件和文件中函数的序号或者名称。使用动态库的时候,往往提供两个文件:一个引入库文件和一个DLL(.dll)文件。

注意:
虽然引入库文件的后缀名也是”.lib”,但该文件和静态库的”.lib”文件有着本质上的区别。

静态库的”.lib”文件包含数据和函数的声明实现,而动态库的”.lib”引入库文件则仅包含导出的函数和变量的符号名(声明),而在DLL文件中才包含实际的函数和数据。

在使用动态库的情况下,在编译链接可执行文件时,只需要链接该DLL的引入库文件,该DLL中的函数代码和数据并不复制到可执行文件中,直到可执行程序运行时,才去加载所需的DLL,将DLL映射到进程的地址空间中,然后访问DLL中的导出函数。

这时,在发布产品时,除了发布可执行文件以外,还要发布该程序将要调用的动态链接库(dll)。
 

三、动态链接库的优点

 1、DLL可以实现代码、资源和数据共享,可以被所有的Windows应用程序调用。因此,使用DLL,能避免可执行文件过于庞大,同时可以实现各个程序之间的数据交换。

2、DLL是独立于编程语言的。任何编程语言,只要它编写的DLL文件遵循DLL文件的规范,就可以被其他编程语言调用。

3、节省空间,尤其是内存空间。每个调用DLL函数的可执行文件,使用的是同一段DLL映射的内存空间,因此有效地节省了内存。同时,DLL中的函数只有在被调用时才被加载至内存,多个可执行文件调用同一DLL,也只需要加载一次。

4、隐藏及可扩展特性。虽然通过函数原型定义,编程者可以自由使用DLL中的函数,但是无法知道函数实现的细节,因此对于程序而言,这种方式非常安全。由于DLL是独立于执行文件的,因为为在不改变函数名称的情况下,同一函数可以实现不同的功能或扩展原来的功能。Windows操作系统就是这样实现的,从Windows98到Windows XP,DLL中的函数,即API函数,其名称、参数都是完全相同的,但是实现的功能不同。Windows的补丁程序也多是通过修改DLL文件完成的。

5、提供二次开发的平台。可以采用DLL的形式提供一个二次开发的平台, 让用户可以利用该DLL中已实现的功能, 封装成自己需要的符合业务需求的DLL, 实现二次开发.

参考:

动态链接库(一)--动态链接库简介-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/SNAKEpc12138/article/details/126108209?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170245623316800197099906%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170245623316800197099906&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-126108209-null-null.142%5Ev96%5Epc_search_result_base3&utm_term=%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93&spm=1018.2226.3001.4187

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值