Chapter_16概要1.ppt

Chapter_16概要1

—— Chapter 16 动态连接库(DLL) 2009-10-26 什么是DLL Windows允许同时运行的多个程序共享一组函数的单一拷贝,于是引入了动态链接方式,将可共享的程序代码以及各种数据资源编译成单独的模块,即动态链接库(DLL)。 动态连接库 (DLL, Dynamic Link Library ) 是Windows操作系统的基础,所有的API函数都包含在DLL中。 作用机制: 应用程序 = 可执行模块+若干DLL模块 当执行应用程序时,系统会把与可执行模块相链接的DLL模块加载到当前进程地址空间。 16.1 DLL基础 DLL的定义 动态链接库: 是应用程序中的一段程序,将它放在一个不同的容器内,是一个可以从主.exe文件中单独执行的模块.可以认为一个DLL就是其它应用程序在执行时,能够动态链接和调用的一组服务或函数. DLL的概念 DLL是一个可以执行的并可以被多个Windows应用程序共享的程序模块(称为Module),模块中包含了一些可以被多个Windows应用程序或DLL共享的代码、数据和资源。 动态连接库文件的扩展名一般是dll,也有可能是drv,sys和fon(它们分别对应的是设备驱动文件、系统文件和字体资源文件)。 静态链接和动态链接 (1)静态链接 传统的库函数是通过静态链接链到应用程序中的。这些库函数可能来自编程语言提供的标准库,也可能是由操作系统提供的API。 (2)动态链接 动态链接是指在把应用程序的目标代码链接成EXE文件时并没有将函数库中的函数复制到应用程序的可执行文件中,而是在程序运行时动态地加载所需的函数。 DLL特性: DLL中存放的一般是一些公共的子程序段或各种资源和数据.一个最大的特点:可以实现应用程序本地化.如在DLL中封装了各种语言,在安装时进行适当的选择就能实现本地化. DLL的最大特性是支持动态载入。 即:应用程序在运动时根据所需要的功能加载对应的DLL,而在不需要该功能的时候,又可以卸载这个DLL。 1.扩展应用程序 2.语言无关特性 3.简化开发过程 4.提高内存使用效率 5.数据和资源共享 6.实现某些特殊功能 DLL的种类 主要有Win32 DLL和 MFC APPWizard DLL 两大类及相关子类。 动态链接库和静态链接库的比较 一个应用程序和函数的链接方式有两种: 动态链接:在应用程序中不需要包含所要调用函数的代码,而只需要所调DLL函数的一些信息,如DLL位置及相应的函数名。与函数的链接到编译或运行时进行。 静态链接:应用程序必须从静态链接库中取得所需调用函数的代码,并把这些代码放在应用程序的可执行代码中。如一般的库函数调用则属此类。 16.1.1 DLL的隐式链接 DLL中包含一个或多个函数,调用这些函数的过程和编译,链接的过程是独立的.要产生可执行文件有两个步骤: 1.编译过程; 编译源码,为每个C/C++源文件生成一个.obj模块,由编译器完成。 2.链接过程 把应用程序的各个.obj模块链接起来产生.exe文件,由链接器完成。 DLL隐式链接是指: 在链接的过程中,把应用程序所需要的DLL模块的各个名字和输入符号都记录下来,使得应用程序在运行时可以动态载入该DLL。 静态载入DLL 这种方法是将DLL文件映像映射到调用进程地址空间的最简单的办法。 静态载入DLL的前提是在编译之前已经明确知道要调用DLL中的哪几个函数,编译时在目标文件中只保留必要的链接信息,而不包含DLL函数的代码。 在程序执行时,利用链接信息加载DLL函数代码并在内存中将其链接进入调用程序的执行空间,从而实现了代码的重用。 16.1.2 DLL的显式加载 经过隐式链接DLL在应用程序初始化时,系统负责把这些DLL都加载到应用程序的进程地址空间。 显式方式不仅灵活,而且较为安全。缺陷是:若DLL文件较大,且引入时为首次引导加载,则影响运行速度。 与隐式链接相比,显式加载DLL主要有以下几个特性: 1.显式加载的DLL并不会在应用程序初始化时就加载,而是在运行时根据需要调用LoadLibrary或Lo

文档评论(0)

1亿VIP精品文档

相关文档