的同步问题。通过本章的介绍,读者可以看出,多线程程序设计通常比一般的单线程程序复
杂,在程序设计过程中,一定要考虑清楚各线程的关系,避免出现死锁或不同步的现象。另
外需要注意现在大多数用户使用的是单CPU 计算机,在这种机器上运行多线程程序,有时反
而会降低系统的xìng能。因此,在设计多线程应用程序时,应慎重选择,视具体情况加以处理,
使应用程序获得最佳的xìng能。
枫叶文学网www.fywxw.com
第10 章 动态链接库
动态链接库(Dynamic Link Library)是一个可执行模块,其包含的函数可以由Windows
应用程序调用以执行一些功能,主要为应用程序模块提供服务。本章将全面、系统地阐述在
Visual C++平台下进行Win32 动态链接库的设计和应用。主要包括下面几个方面的内容。
? 动态链接库(DLL)的基本知识。
? DLL 的出入口函数。
? 调用DLL 中的两种方式。
? 开发DLL 的方式。
? DLL 中资源的利用。
? 钩子(Hook)函数的应用方法。
为了使读者充分理解概念,对于动态链接库的开发,本章使用了“界面汉化”的示例来
说明资源在动态链接库中的使用。钩子函数对于大多数读者来说可能是一项较为陌生的技术,
为了加深理解,这里列举了两个关于捕获消息的钩子函数示例,可以帮助读者更好地理解钩
子函数的原理和使用方法。
10.1 动态链接库的基础知识
比较大的应用程序都是由很多模块组成的,这些模块彼此协作,以完成整个软件系统的
工作。其中可能存在一些模块的功能较为通用,在构造其他软件系统时仍会被使用。在构造
软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE 文件中,会产生一些
问题。一是增加了应用程序的大小,这样会占用更多的磁盘空间,程序运行时也会消耗较大
的内存空间,造成系统资源的浪费;另外,在编写大的EXE 程序时,每次修改重建时都必须
调整编译所有源代码,不但增加了编译过程的复杂xìng,也不利于阶段xìng的单元测试。
Windows 系统平台上提供了一种完全不同的有效编程和运行环境,可以将独立的程序模
块创建为较小的动态链接库(Dynamic Linkable Library)文件,并可对它们单独进行编译和
测试。在运行时,只有在EXE 程序确实要调用这些DLL 模块的情况下,系统才会将它们装
载到内存空间中。这种方式不仅减少了EXE 文件的大小和对内存空间的需求,而且使这些
DLL 模块可以同时被多个应用程序使用,从而充分利用资源。Microsoft Windows 将一些主要
的系统功能以DLL 模块的形式实现。例如IE 中的一些基本功能就是由DLL 文件实现的,它
可以被其他应用程序调用和集成。一般来说,下面的这几种情况必须用到动态链接库技术。
? 多个应用程序共享代码和数据就是通过共享动态链接库实现的,比如Office 软件的各
个组成部分有相似的外观和功能。
?