http://wenku.baidu.com/link?url=cnaRe_jQ7OziHskrMgg5osYglrBRLZDTw-XD6HO4ZjbT60uiPisdolgz9KCfVuOb2qJM

一、动态、库的概念

  

 

 

 

动态链接库(

Dynamic Link Library

,缩写为

DLL

)是一个可以被其它应

用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。

 

 

动态链接库文件的扩展名一般是

dll

,也有可能是

drv

sys

fon

,它和可执

行文件(

exe

)非常类似,区别在于

DLL

中虽然包含了可执行代码却不能

 

 

单独执行,而应由

Windows

应用程序直接或间接调用。

 

    

动态链接是相对于静态链接而言的。

所谓静态链接是指把要调用的函数或者

过程链接到可执行文件中,

成为可执行文件的一部分。

换句话说,

函数和过程的

代码就在程序的

exe

文件中,

该文件包含了运行时所需的全部代码。

当多个程序

都调用相同函数时,

内存中就会存在这个函数的多个拷贝,

这样就浪费了宝贵的

内存资源。

而动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件

中去,

而是仅仅在其中加入了所调用函数的描述信息

(往往是一些重定位信息)

仅当应用程序被装入内存开始运行时,

Windows

的管理下,

才在应用程序与相

应的

DLL

之间建立链接关系。

当要执行所调用

DLL

中的函数时,

根据链接产生的

重定位信息,

Windows

才转去执行

DLL

中相应的函数代码。

 

一般情况下,如果一个应用程序使用了动态链接库,

Win32

系统保证内存中只有

DLL

的一份复制品,这是通过内存映射文件实现的。

DLL

首先被调入

Win32

系统

的全局堆栈,

然后映射到调用这个

DLL

的进程地址空间。

Win32

系统中,

每个

进程拥有自己的

32

位线性地址空间,如果一个

DLL

被多个进程调用,每个进程

都会收到该

DLL

的一份映像。与

16

Windows

不同,在

Win32

DLL

可以看作

是每个进程自己的代码。

 

二、动态链接库的优点

 

 

 

 

 1

 

共享代码、资源和数据

 

 

 

 

 

 

使用

DLL

的主要目的就是为了共享代码,

DLL

的代码可以被所有的

Windows

应用程序共享。

 

 

 

 

 2

 

隐藏实现的细节

 

 

 

 

 

 DLL

中的例程可以被应用程序访问,而应用程序并不知道这些例程的细

节。

 

 

 

 

 3

 

拓展开发工具如

Delphi

的功能

 

 

 

 

 

由于

DLL

是与语言无关的,因此可以创建一个

DLL

,被

C++

VB

或任何支

持动态链接库的语言调用。

这样如果一种语言存在不足,

就可以通过访问另一种

语言创建的

DLL

来弥补。

 

 

 

 

 

三、动态链接库的实现方法

 

 

 

 

 1

 Load-time Dynamic Linking 

 

 

 

 

这种用法的前提是在编译之前已经明确知道要调用

DLL

中的哪几个函数,

编译时在目标文件中只保留必要的链接信息,

而不含

DLL

函数的代码;

当程序执

行时,利用链接信息

 

 

加载

DLL

函数代码并在内存中将其链接入调用程序的执行空间中,其主要目的

是便于代码共享。

 

 

 

 

 2

 Run-time Dynamic Linking  

 

 

 

 

这种方式是指在编译之前并不知道将会调用哪些

DLL

函数,完全是在运行

过程中根据需要决定应调用哪个函数,并用

LoadLibrary

GetProcAddress

态获得

DLL

函数的入口地址。

 

 

 

教你认识动态链接库

DLL

文件

  

 

 

 

 

 DLL

Dynamic Link Library

的缩写,意为动态链接库。在

Windows

中,

许多应用程序并不是一个完整的可执行文件,

它们被分割成一些相对独立的动态

链接库,即

DLL

文件,放置

 

于系统中。

当我们执行某一个程序时,

相应的

DLL

文件就会被调用。

一个应用程

序可有多个

DLL

文件,一个

DLL

文件也可能被几个应用程序所共用,这样的

DLL

文件被称为共享

DLL

文件。

 

DLL

文件一般被存放在

C:WindowsSystem

目录下。

 

 

 

 

 

 1

、如何了解某应用程序使用哪些

DLL

文件

 

 

 

 

 

右键单击该应用程序并选择快捷菜单中的“快速查看”命令,在随后出现

的“快速查看”窗口的“引入表”一栏中你将看到其使用

DLL

文件的情况。

 

 

 

 

 2

、如何知道

DLL

文件被几个程序使用

 

 

 

 

 

运行

Regedit

,进入

HKEY_LOCAL_MACHINESoftwareMicrosrftWindowsCurrent- 

VersionSharedDlls

子键查看,

其右边窗口中就显示了所有

DLL

文件及其相关数

据,其中数据右边小括号内的数字就说明了被几个程序使用,(

2

)表示被两个

程序使用,(

0

)则表示无程序使用,可以将其删除。

 

 

 

 

 3

、如何解决

DLL

文件丢失的情况

 

 

 

 

 

有时在卸载文件时会提醒你删除某个

DLL

文件可能会影响其他应用程序的

运行。所以当你卸载软件时,就有可能误删共享的

DLL

文件。一旦出现了丢失

DLL

文件的情况,如果你能确定其名称,可以在

Sysbckup

(系统备份文件夹)

 

中找到该

DLL

文件,将其复制到

System

文件夹中。如果这样不行,在电脑启动

时又总是出现“***dll

文件丢失„„”的提示框,

你可以在“开始

/

运行”中运

Msconfig

,进入系统配置实用程序对话框以后,单击选择“System.ini”标

签,

找出提示丢失的

DLL

文件,

使其不被选中,

这样开机时就不会出现错误提示

了。

 

 

 

dll

文件与

lib

文件的关系

  

 

(1)lib

是编译时需要的,

dll

是运行时需要的。

  

如果要完成源代码的编译,有

lib

就够了。

  

如果也使动态连接的程序运行起来,有

dll

就够了。

  

在开发和调试阶段,当然最好都有。

  

(2)

一般的动态库程序有

lib

文件和

dll

文件。

lib

文件是必须在编译期就连接

到应用程序中的,

dll

文件是运行期才会被调用的。

如果有

dll

文件,

那么对

应的

lib

文件一般是一些索引信息,具体的实现在

dll

文件中。

 

如果只有

lib

文件,

那么这个

lib

文件是静态编译出来的,

索引和实现都在其中。

静态编译的

lib

文件有好处:

给用户安装时就不需要再挂动态库了。

但也有缺点,

就是导致应用程序比较大,而且失去了动态库的灵活性,

 

在版本升级时,同时要发布新的应用程序才行。

  

(3)

在动态库的情况下,有两个文件,一个是引入库(

.LIB

)文件,一个是

DLL

文件,引入库文件包含被

DLL

导出的函数的名称和位置,

DLL

包含实际的函数和

数据,应用程序使用

LIB

文件链接到所需要使用的

DLL

文件,

 

库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,

存放的不是被调用的函数代码,

而是

DLL

中所要调用的函数的内存地址,

这样当

一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,

从而节

省了内存资源。

从上面的说明可以看出,

DLL

.LIB

文件必须随应用程序一起发

行,否则应用程序将会产生错误

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值