动态连接文件(*.dll)是怎么工作的?

作者&投稿:除豪 (若有异议请与网页底部的电邮联系)
动态链接库文件的介绍~

动态链接库文件,是一种不可执行的二进制程序文件,它允许程序共享执行特殊任务所必需的代码和其他资源。Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境下操作的许多函数和资源。一般被存放在C:视窗系统System目录下。Windows中,DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名;Debian系统中常常是.so的文件。它们向运行于Windows操作系统下的程序提供代码、数据或函数。程序可根据DLL文件中的指令打开、启用、查询、禁用和关闭驱动程序。

DLL文件即动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源。Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境下操作的许多函数和资源。

DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名。它们向运行于Windows操作系统下的程序提供代码、数据或函数。程序可根据DLL文件中的指令打开、启用、查询、禁用和关闭驱动程序。

DLL的全称是Dynamic Link Library, 中文叫做“动态链接文件”。在Windows操作系统中, DLL对于程序执行是非常重要的, 因为程序在执行的时候, 必须链接到DLL文件, 才能够正确地运行。而有些DLL文件可以被许多程序共用。因此, 程序设计人员可以利用DLL文件, 使程序不至于太过巨大。但是当安装的程序越来越多, DLL文件也就会越来越多, 如果当你删除程序的时候, 没有用的DLL文件没有被删除的话, 久而久之就造成系统的负担了。

DLL是动态连接库。使用动态连接库的一些好处是:
1.多个应用程序共享代码和数据:比如Office软件的各个组成部分有相似的外观和功能,这就是通过共享动态连接库实现的。
2.在钩子程序过滤系统消息时必须使用动态连接库。
3.动态连接库以一种自然的方式将一个大的应用程序划分为几个小的模块,有利于小组内部成员的分工与合作。而且,各个模块可以独立升级。如果小组中的一个成员开发了一组实用例程,他就可以把这些例程放在一个动态连接库中,让小组的其他成员使用。
4.为了实现应用程序的国际化,往往需要使用动态连接库。使用动态连接库可以将针对某一国家、语言的信息存放在其中。对于不同的版本,使用不同的动态连接库。在使用AppWizard生成应用程序时,我们可以指定资源文件使用的语言,这就是通过提供不同的动态连接库实现的。
VC++、C++ Builder、Delphi都可以编写DLL文件。Visual Basic 5.0以上版本也可以编写一种特殊的DLL,即ActiveX DLL。

DLL不是独立运行的程序,它是某个程序的一个部分,它只能由所属的程序调用。用户不能,也不需要打开它

DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。DLL文件一般被存放在C:\Windows\System目录下。
1、如何了解某应用程序使用哪些DLL文件
右键单击该应用程序并选择快捷菜单中的“快速查看”命令,在随后出现的“快速查看”窗口的“引入表”一栏中你将看到其使用DLL文件的情况。
2、如何知道DLL文件被几个程序使用
运行Regedit,进入HKEY_LOCAL_MACHINE\Software\Microsrft\Windows\Current-Version\SharedDlls子键查看,其右边窗口中就显示了所有DLL文件及其相关数据,其中数据右边小括号内的数字就说明了被几个程序使用,(2)表示被两个程序使用,(0)则表示无程序使用,可以将其删除。
3、如何解决DLL文件丢失的情况
有时在卸载文件时会提醒你删除某个DLL文件可能会影响其他应用程序的运行。所以当你卸载软件时,就有可能误删共享的DLL文件。一旦出现了丢失DLL文件的情况,如果你能确定其名称,可以在Sysbckup(系统备份文件夹)中找到该DLL文件,将其复制到System文件夹中。如果这样不行,在电脑启动时又总是出现“***dll文件丢失……”的提示框,你可以在“开始/运行”中运行Msconfig,进入系统配置实用程序对话框以后,单击选择“System.ini”标签,找出提示丢失的DLL文件,使其不被选中,这样开机时就不会出现错误提示了。

什么是DLL

什么是DLL呢?
DLL(动态连接库),既然是动态,那么就是有静态连接库,我想如果这么说大家

会更明白:
也许有的人在DOS下编写过程序都明白这么一件事情,我写了一个程序,里面有一

个功能就是把屏幕的内容翻转在转90°打印出来,那么我需要把整个程序写好放

到我的所有代码中,但是如果我写另外一个程序的时候也有相通的功能,我可以

调用以前的程序这个功能吗?当然是不可以的了,所以我就要重新的写一次,如

果有5个需要调用这个功能的程序,我的这个功能函数需要20K的地方,那么我的

硬盘就有80K的垃圾出现(20k*5 - 20k),这仅仅是一个函数,大家是否可以数

清除WINDOWS如果这样来写,需要多少函数吗?你看看所有的按钮、滚动条、

Listbox\Textbox\checkBox\窗体、打印对话框、颜色对话框、打开、保存、另存

、字体对话框、文件的排列、拷贝、粘贴...... 这一切的一切是不是都需要在所

有的程序中都要写出来呢?如果真的是这个样子,那么我们的windows应该按TB来

计算了(1TB=1024GB),也许你说你的硬盘很大,那么他们还要在运行的时候占

用相同大下的内容呢!所以发展出来了,动态连接库(dll)这个感念:

动态连接,就是把这些相通的功能、函数都放到一种特殊形式的windwos可执行文

件中(dll),生成一个DLL的时候,程序员需要写出,其中包含那些函数需由其

他程序来访问。这个过程叫做对函数的“导出”
创建windows程序的时候,专门的连接程序对程序的对象文件进行扫描,并生成一

个列表,列出那些调用的函数在那个DLL那个位置,指定各个函数所在位置的过程

叫做对函数的“导入”,当程序运行的时候,一旦要求用到执行文件内部没有的

函数,windows就会自动装载动态连接库,使应用程序可以访问这些函数。此时,

每个函数的地址都会解析出来,并且以动态的方式连接到程序里--这便是术语

“动态连接”的由来。
另外还有一个好处,就是当你更新你的这个函数的版本和功能的时候,静态连接

所需要做的工作是多少(假设按windwos来说他有上千个这样的函数,一共有100

多个程序来使用,那静态连接需要100000次的更新,动态连接只需要1000次)
,从而也节省了内存的空间。
动态连接库不一定是DLL扩展名的,也可以是ocx、vbx、exe、drv 等等的
大家可以发现在调用WIN32 api的时候里面都会有说明是来自于那个dll等宿主文

件的
现在我就在这里讲讲一些标准的dll用途:
看下面这个API声明:
Public Declare Function GetWindowsDirectory Lib "kernel32" Alias

"GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long)

As Long
看见kernel32了吗,其实这个就是kernel32.dll的名字,你可以在你的硬盘里找

到他,这就是说GetWindowsDirectory这个函数是在kernel32.dll里面,他的别名

是GetWindowsDirectoryA,()中是他的参数,有两个一个是字符型,一个是长

整型,返回值也是长整型。lpBuffer ------- String,指定一个字串缓冲区,

用于装载Windows目录名。除非是根目录,否则目录中不会有一个中止用的“\”

字符nSize ---------- Long,lpBuffer字串的最大长度,返回值 为Long,复制

到lpBuffer的一个字串的长度。如lpBuffer不够大,不能容下整个字串,就会返

回lpBuffer要求的长度。零表示失败。
这就是API声明的意义所在!
DLL的说明
KERNEL32.DLL ---- 低级内核函数。使用他可以完成内存管理、任务管理、

资源控制等。
USER32.DLL------于windows管理有关的函数。消息、菜单、光标、计时器

、通信和其他大多数非现实函数都可以从这里找到
GDI32.DLL-------图形设备接口库。于设备输出有关的函数:大多数绘图

、显示场景、图元文件、坐标及其字体函数都可以从这梨找到。
COMDLG32.DLL\LZ32.DLL\VERSION.DLL\---这都是提供一些附加函数的库,包

括通用对话框、文件压缩、版本控制的支持。

COMCTL32.DLL --------一个新的windows控件集合,比如TreeView和RichTextBox

等等,最初这个好像是为了win95而制作的,但是现在也使用与NT下
MAPI32.DLL---------提供了一套电子邮件的专用函数
NETAPI32.DLL--------提供了一套访问和控制网络的函数
ODBC32.DLL--------(不用我再说了吧)ODBC功能的DLL之一
WINMM.DLL------(这可不是WINDOWS的MM)是多媒体控制访问函数集合

windows api正在快速发展和变化,是你我任何单个人都追赶不上的速度发展,幸

运的是我们不用掌握所有的windows API,只是掌握需要经常使用的WINDOWs api

和他的常规结构、基本感念就可以了,这亮点很重要。


在下载剧集时常遇到这些文件后缀名:"avi","idx","rar",请问是指的什么...
压缩文件的后缀名 为了提高存储效率,许多公司都推出了压缩数据的方法和相应的软件,这类文件的使用主要通过压包和解包软件来进行,主要的后缀有:*.zip、*.arj、*.rar、*.lzh、*.jar。还有一些专用的压缩文件,如:*.ex_、*.dl_、*.d3_、*.cab等。 数据库类文件的后缀名 在Dbase、FoxBase、Foxpro系列软件的...

系统盘出了问题或是被优化使得某些程序无法打开怎么办
建议大家将不常用的桌面图标放到一个专门的文件夹中或者干脆删除! 5、ADSL导致的系统启动变慢 默认情况下Windows XP在启动时会对网卡等网络设备进行自检,如果发现网卡的IP地址等未配置好就会对其进行设置,这可能是导致系统启动变慢的真正原因。这时我们可以打开“本地连接”属性菜单,双击“常规”项中的“Internet协议...

usb网卡 每次开机重装驱动
建议大家将不常用的桌面图标放到一个专门的文件夹中或者干脆删除! 5、ADSL导致的系统启动变慢 默认情况下Windows XP在启动时会对网卡等网络设备进行自检,如果发现网卡的IP地址等未配置好就会对其进行设置,这可能是导致系统启动变慢的真正原因。这时我们可以打开“本地连接”属性菜单,双击“常规”项中的“Internet协议...

linux中\/etc\/rc.d\/rc.local是什么文件
是启动加载文件。在ubuntu下要把一个程序加入开机启动,一般可以通过修改rc.local来完成,但ubuntu下有两个rc.local文件。分别是\/etc\/rc.local和\/etc\/init.d\/rc.local。可以看一下两个文件的内容找到他俩的关系:\/etc\/init.d\/rc.local。

请问我有一个.so文件,如何在Linux下编程使用呢?
-lxx xx是你的.so文件名 其实使用方法和你使用数学库函数是一样的,源代码中添加 include <math.h>,编译的时候,加上-lm参数。注:linux下的.so文件为共享库,相当于windows下的dll文件。

VS2010的MFC程序如何调用动态库文件(dll文件)?放在system32中仍然编译...
dll这个东西,只要放到编译时会去访问的任意路径上即可。比如你现在是Debug,你可以放到Debug文件夹或者工程文件夹;你现在是Release, 你可以放到Release文件夹或者工程文件放到System32无法访问可能说明你的程序根本不需要去访问System32,虽然这不太可能。当然我可以认为楼主是在隐式调用dll, 显示调用失败...

紧急求助电脑高手.我的电脑要崩溃了
请到http:\/\/www.mydrivers.com\/dir83\/d33572htm下载Adaptec ASPl最新驱动,运行aspiinst.exe即可安装 0 x 00000023:FAT_FILE_SYSTEM 0 x 000000024:NTFS_FILE_SYSTEM ?错误分析0x00000023通常发生在读写使用FAT16或FAT32文件系统的系统分区时,而0 x 000000024则是由于NTFS.SYS文件出现错误(这个驱动文件的作用是...

我电脑一按ESC就蓝屏怎么办
1.重要文件损坏或丢失引起的蓝屏故障(包括病毒所致)。 实例:Win98中的VxD(虚拟设备驱动程序)或是.DLL�动态连接库 之类的重要文件丢失,情况一般会比较严重,会出现“蓝屏警告”。 解决方法一:记下所丢失或损坏的文件名�用Win98启动盘中的“Ext”命令从Win98安装盘中提取和恢复被损坏或丢失的文件,步骤如...

windows中都有那些类型的文件?他们具体的含义是什么?
还有一些专用的压缩文件,如:*.ex_、*.dl_、*.d3_、*.cab等。 5.数据库类文件的后缀名 在Dbase、FoxBase、Foxpro系列软件的环境下有以下几类后缀: .dbf 数据库文件(databasefile) .prg 命令文件(即程序Program) .fxp 编译后的程序 .scx和.sct 屏幕文件 .fpt 备注字段文件 .frx和.frt 报表文件 ...

为什么我的电脑里的文件怎么一直显示文件类型的扩展名
蓝屏故障和其它故障一样,根据成因大致可以分为软件和硬件两个方面。现在还是遵循先软后硬的原则来看看故障的成因和解决办法吧!一、软件引起的蓝屏故障 1.重要文件损坏或丢失引起的蓝屏故障(包括病毒所致)。实例:Win98中的VxD(虚拟设备驱动程序)或是.DLL�动态连接库 之类的重要文件丢失,...

武陟县19833776447: *.dll是什么文件?如何建立的?有何作用? -
朝孟卤米: DLL文件即动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源.Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境下操作的许多函数和资源. DLL多数情况下是带有DLL扩展名...

武陟县19833776447: 请问动态链接文件(.dll)怎么打开,怎么编辑啊 -
朝孟卤米: DLL文件是无法打开的 就算用即使本打开也什么也修改不了 DLL文件即动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源.Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境...

武陟县19833776447: dll动态链接库文件是什么意思?干什么用的? -
朝孟卤米: 序运行并调用一个DLLs中的函数时,该程序才要求这个函数的地址.此时Windows才在DLLs中寻找被调用函数,并把它的地址传送给调用程序.采用这种方法,DLLs达到了复用代码的极限. 动态链接库的另一个方便之处是对动态链接库中函数的修改可以自动传播到所有调用它的程序中,而不必对程序作任何改动或处理. DLLs不仅提供了函数重用的机制,而且提供了数据共享的机制.任何应用程序都可以共享由装入内存的DLLs管理的内存资源块.只包含共享数据的DLLs称为资源文件.如Windows的字体文件等.

武陟县19833776447: 程序中的.dll文件是如何形成的?谢谢 -
朝孟卤米: *.dll是动态链接库文件,dll文件介绍: DLL是DynamicLinkLibrary的缩写形式,动态链接库(DLL)是作为共享函数库的可执行文件.动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数.函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数.DLL还有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL副本的内容. 可以把动态链接库理解为一个函数库.他包含了全局数据、编译过的函数和资源.动态链接库不能像普通的可执行文件那样直接运行,而是用来为其他的

武陟县19833776447: 如何使用工具修复DLL动态链接库文件 -
朝孟卤米: 操作系统中的动态链接库是以DLL(扩展名),这是英文Dynamic Link Library 的首字母缩写.操作系统与软件之间是通过这些动态链接库(DLL扩展名)文件提供底层支持.如果出错,就会导致系统异常.虽然可以使用注册命令:regsvr32 ...

武陟县19833776447: 动态链接库dll应该怎样设置调试 -
朝孟卤米: DLL有三种调试方法:方法1:如果动态链接库是自己编写的,并且测试代码也是自己编写的,那么此时我们可以将动态链接库和测试代码的工程建立在一起,在调试测试代码的时候,可以直接调用动态链接库中的代码.我们在测试链接库项目...

武陟县19833776447: 请问dll文件是怎么用的啊 -
朝孟卤米: 那我们先来认识一下什么是dll dll实际上是动态链接库的缩写,从windows1.0开始,动态链接库就是整个操作系统的基础,那么这有什么作用呢?在dos时代,程序员是通过编写程序来达到预期的目的的,每实现一个目的就需要编写一个程序,这...

武陟县19833776447: 有人告诉我动态链接库文件DLL的详解吗? -
朝孟卤米: 一、动态链接库的概念 动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源.动态链接库文件的扩展名一般是dll,也有可能是drv、sys和fon,它和可执行文件...

武陟县19833776447: DLL文件是怎么做出来的,它是如何调用exe文件的? -
朝孟卤米: DLL文件 是动态连接库文件,本身不能自己运行,exe需要时加载调用.用vc++建立动态连接库工程,按sdk 要求的格式来写程序.编译就可以了.

武陟县19833776447: .DLL文件怎么打开?
朝孟卤米: Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境下操作的许多函数和资源.DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名.它们向运行于Windows操作系统下的程序提供代码、数据或函数....

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网