DLL 简介
动态链接库(Dynamic Link Library,DLL)是实现Windows应用程序代码重用和共享的重要手段,它是从C语言函数库和Pascal语言的库单元的概念发展起来的
在C和Pascal语言中,很多标准函数可以放在一个函数库中或一个库单元中,在C和Pascal语言中,很多标准函数可以放在一个函数库中或一个库单元中
在程序编译的时候,由编译器把所调用的函数添加到可执行文件中去,(即每个调用均会产生一个函数代码的拷贝)
随着使用函数库或库单元等方法已不能适用Windows多任务环境下应用程序,因为使用这种方法每个应用程序都必须拥有完成屏幕输出、消息处理、内存管理、对话框操作都相同功能的函数,从而使应用程序非常庞大
为解决这个问题,必须能使几个应用程序能共享函数的单一拷贝,DLL 应运而生
DLL是一个可以执行的并可以被多个Windows应用程序共享的程序模块(Module),模块中包含了一些可以被多个Windows应用程序或DLL共享的代码、数据和资源
动态链接库不用重复编译或链接,一旦装入内存,DLL中的函数就可以被系统中的任何正在运行的应用程序所使用,而不必产生函数的多个拷贝
DLL主要的用途是使应用程序可以在运行时刻载入其中的代码,而不是编译时连接到应用程序中
DLL文件的扩展名一般是dll,也可能是drv(设备驱动文件),sys(系统文件)和fon(字体资源文件)它和可执行文件(exe)很类似,区别在于,DLL文件中虽然包含了可执行代码却不能单独执行,只能由Windows应用程序直接或间接调用,DLL类似于一般的运行函数库,但它与一般的运行库函数又有区别,区别主要在于,DLL与一般的函数库与应用程序链接的时机不同
链接分类
DLL是在应用程序运行期间被链接进来的,而一般函数库是在应用程序使用链接器(Linker)链接文件时被链接进来的,链接方式分为动态链接与静态链接
静态链接
传统的库函数是通过静态链接链接到应用程序中的。这些库函数可能来自程序设计语言提供的标准库,也可能是由操作系统提供的API
由应用程序源文件产生可执行文件,一般要经历两个过程
- 将源程序编译成目标模块,在此阶