中国地质大学(武汉)
计算机学院
第十三章 动态链接库
(Visual C++ Dynamic Link
Library)
一、动态链接库概述
二、动态链接库的创建
三、动态链接库的调用
中国地质大学计算机学院
一、动态链接库概述
1. 动态链接库定义
2. 静态链接与动态链接
3. 导出与导入
4. 隐式链接与显式链接
5. 搜索动态链接库
6. 动态链接库的优点
7. 动态链接库的分类
8. 动态链接库的原理
中国地质大学计算机学院
1. 动态链接库定义
•
动态链接库 (Dynamic Link Library, 简称 DLL) 是
一个包含了若干函数的可执行模块,它实质上是一个函数包,
Windows 应 用 程 序 可 以 调 用 这 些 函 数 来 完 成 实 际 的 任
务。 DLL 在 Windows 环境中起着重要的作用—— Windows
利用 DLL 来建立 Windows 应用程序可以使用的 Windows
函数与资源。
•
动态链接库是一个文件,其中包含有函数或全局变量,
使用他们就像应用程序使用自己定义的函数一样。用 API 开
发 Windows 应用程序,实质就是调用 Windows 操作系统下
的动态链接库。
中国地质大学计算机学院
2. 静态链接与动态链接
•
DLL 与运行函数库(如 C 语言的运行函数库)类似,二者主要
区别在于库代码的链接时机不同。
静态链接库在多任务环境中建立与运行时效率可能很低。一方面,
如果两个应用程序同时运行,且它们使用了同一个静态库中的函数,那
么就要求系统中出现该函数的两个副本,这显然降低了内存的使用效率。
另一方面,对于比较复杂的问题,应用静态链接库将导致最终的应用程
序长度超过系统内存而无法运行。
DLL 是在运行期间才被链接进来,该操作由 Windows 操作系
统自身来完成,而运行函数库则是在程序链接期间由应用程序的链
接器如 LINK.EXE 来完成,运行函数库的链接被称为“静态链接”,
它把函数代码链接到应用程序中,增加了应用程序最终执行代码的
长度。它的主要优点是建立了一个应用程序可以利用的标准函数集,
这样在开发应用程序时就无需包含函数库中所包含的函数源代码。
中国地质大学计算机学院
2. 静态链接与动态链接 (续)
•
与静态链接库不同,动态链接库则允许若干个应用程序共享某
个 函 数 的 单 个 副 本 。 事 实 上 , 每 个 Windows API 函 数 , 如
GetMesssage() 、 CreateWindow() 和 TextOut() 分别留于动
态链接库—— Kernel32.dll 、 User32.dll 、 Gdi32.dll 之中。
如果两个应用程序同时运行,且都使用了某个特定的 Windows 函数,
那么它们将共享该函数代码的单个副本。 DLL 除了实现代码的共享
外 , 还 可 以 实 现 其 它 资 源 的 共 享 , 如 数 据 和 硬 件 资 源 的 共
享。 Windows 的设备驱动程序允许应用程序共享硬件资源,这些设
备驱动程序就是以动态链接库的形式来出现。
•
从某种程度上讲,动态链接库也是一种类型的计算机资源。一
个动态链接库可以为多个应用程序使用,如果一个应用程序使用了
某个动态链接库中函数,若库不存在,则调用将不能完成。