DLL文件(软件文件类型)

DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。

链接方法

当您在应用程序中加载 DLL 时,可以使用两种链接方法来调用导出的 DLL 函数。这两种链接方法是加载时动态链接和运行时动态链接。

在运行时动态链接中,应用程序调用 LoadLibrary 函数或 LoadLibraryEx 函数以在运行时加载 DLL。成功加载DLL后,可以使用 GetProcAddress 函数获得要调用的导出的 DLL 函数的地址。在使用运行时动态链接时,无需使用导入库文件。

Win32 DLL的特点

Win32 DLL与 Win16 DLL有很大的区别,这主要是由操作系统的设计思想决定的。一方面,在Win16 DLL中程序入口点函数和出口点函数(LibMain和WEP)是分别实现的;而在Win32 DLL中却由同一函数DLLMain来实现。无论何时,当一个进程或线程载入和卸载DLL时,都要调用该函数,它的原型是

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved);

其中,第一个参数表示DLL的实例句柄;第三个参数系统保留;这里主要介绍一下第二个参数,它有四个可能的值:DLL_PROCESS_ATTACH(进程载入),DLL_THREAD_ATTACH(线程载入),DLL_THREAD_DETACH(线程卸载),DLL_PROCESS_DETACH(进程卸载),在DLLMain函数中可以对传递进来的这个参数的值进行判别,并根据不同的参数值对DLL进行必要的初始化或清理工作。

举个例子来说,当有一个进程载入一个DLL时,系统分派给DLL的第二个参数为DLL_PROCESS_ATTACH,这时,可以根据这个参数初始化特定的数据。另一方面,在Win16环境下,所有应用程序都在同一地址空间;而在Win32环境下,所有应用程序都有自己的私有空间,每个进程的空间都是相互独立的,这减少了应用程序间的相互影响,但同时也增加了编程的难度。

在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的;而在Win32环境中,情况却发生了变化,当进程在载入DLL时,系统自动把DLL地址映射到该进程的私有空间,而且也复制该DLL的全局数据的一份拷贝到该进程空间,也就是说每个进程所拥有的相同的DLL的全局数据其值却并不一定是相同的。

因此,在Win32环境下要想在多个进程中共享数据,就必须进行必要的设置。亦即把这些需要共享的数据分离出来,放置在一个独立的数据段里,并把该段的属性设置为共享。​

故障排除

可以使用多个工具来解决 DLL 问题。以下是其中的部分工具。

Dependency Walker

Dependency Walker 工具可以递归扫描以寻找程序所使用的所有依赖 DLL。当您在 Dependency Walker 中打开程序时,Dependency Walker 会执行下列检查:

·Dependency Walker 检查是否丢失 DLL。

·Dependency Walker 检查是否存在无效的程序文件或 DLL。

·Dependency Walker 检查导入函数和导出函数是否匹配。

·Dependency Walker 检查是否存在循环依赖性错误。

·Dependency Walker 检查是否存在由于针对另一不同操作系统而无效的模块。

通过使用 Dependency Walker,您可以记录程序使用的所有 DLL。这可能有助于避免和更正将来可能发生的 DLL 问题。当您安装 Microsoft Visual Studio 6.0 时,Dependency Walker 将位于以下目录中:

drive//Program Files//Microsoft Visual Studio//Common//Tools

DLL Universal Problem Solver

DLL Universal Problem Solver (DUPS) 工具用于审核、比较、记录和显示 DLL 信息。下表说明了组成 DUPS 工具的实用工具:

·Dlister.exe:该实用工具枚举计算机中的所有 DLL,并且将此信息记录到一个文本文件或数据库文件中。

·Dcomp.exe:该实用工具比较在两个文本文件中列出的 DLL,并产生包含差异的第三个文本文件。

·Dtxt2DB.exe:该实用工具将通过使用 Dlister.exe 实用工具和 Dcomp.exe 实用工具创建的文本文件加载到 dllHell数据库中。

·DlgDtxt2DB.exe:该实用工具提供 Dtxt2DB.exe 实用工具的图形用户界面(GUI)版本。

DLL影响

文件修复

1、用Windows系统盘功能进行文件修复;

2、若在此之前有一键备份过,可以重新还原;

3、从网上下载系统文件然后复盖到原文件夹里;

该文章由作者:【哈尼贝贝】发布,本站仅提供存储、如有版权、错误、违法等相关信息请联系,本站会在1个工作日内进行整改,谢谢!

发表回复

登录后才能评论