第11 章 动态链接库 本章讨论了 Win32 动态链接库,也就是 DLL。动态链接库(Dynamic Link Library,简称DLL)是一些编译过的可执行代码模块,后缀名为. DLL,可以在应用程序中或其它 DLL 中被调用。在 Windows 环境中,DLL 可以实现多个应用程序共享代码和资源。 DLL 的用途非常广泛,是 Windows 程序设计中的一个非常重要的组成部分。本章将从DLL 的一些基础知识讲起,说明如何在 Delphi 开发环境中创建和使用 DLL。 11.1 概述 11.1.1 DLL 的概念 在开始介绍 DLL 的概念之前,先介绍一些有关 DLL 的一些术语如下: ¾ 应用程序,一个扩展名为.exe 的 Windows 程序。 ¾ 可执行文件,一个包含可执行代码的文件,它包括.dll 文件和.exe 文件。 ¾ 实例,当提到应用程序和 DLL 时,在内存中出现的可执行文件就是实例。Win32 系统通过实例句柄的方式来引用实例。例如,如果一个应用程序运行两次,就会有应用程序的两个实例,同时就有两个实例句柄。当一个 DLL 被调入时,实例及其相应的实例句柄同时产生。应该注意的是,这里所提的实例与类的实例不能混淆。 ¾ 模块,在 32 位 Windows 系统中,模块和实例可以说是同义的。而在 16 位的 Windows系统中,是建立一个模块数据库来管理模块的,一个模块对应一个模块句柄。在 Win32 中,应用程序的每一个实例都拥有自己的地址空间;所以,没有必要为模块单独指定标识符。不过,微软仍然保留了它自己的术语。注意一点,模块和实例是同一个概念。 ¾ 任务,Windows 是一个多任务(或任务切换)环境,所以它必须能够为运行的多个实例合理分配系统资源和时间。于是,Windows 建立一个任务数据库,这个数据库包括任务的实例句柄和其它必要信息,以此实现任务切换功能。任务是 Windows 用来管理和分配资源与时间段的重要元素。 动态链接库是程序模块,它包括代码、数据或资源,能够被其它的Windows应用程序共享。DLL的主要特点之一是应用程序可以在运行时调入代码执行,而不是在编译时链接代码,因此,多个应用程序可以共享同一个DLL的代码。事实上,文件Kernel32.dll、User32.dll、GDI32.dll就是核心Win32系统的动态链接库。Kernel.dll负责内存、进程和线程的管理。USER32.DLL包含了一些程序,是创建窗口和处理Win32消息的用户接口。GDI32.DLL负责处理图形。你还会听说其它的系统DLL,譬如AdvAPI32.dll和ComDlg32.dll,它们分别处理对象安全性/...