什么是dll

2024-09-08 11:38
文章标签 dll

本文主要是介绍什么是dll,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     DLL的概念

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

       DLL文件中存放的是各类程序的函数(子过程)实现过程,当程序需要调用函数时需要先载入DLL,然后取得函数的地址,最后进行调用。使用DLL文件的好处是程序不需要在运行之初加载所有代码,只有在程序需要某个函数的时候才从DLL中取出。另外,使用DLL文件还可以减小程序的体积。

组成一个软件的文件中.dll占据相当多一部分。

      通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。 例如,一个计帐程序可以按模块来销售。 可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。 因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。

此外,可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。 例如,您可能具有一个工资计算程序,而税率每年都会更改。 当这些更改被隔离到 DLL 中以后,您无需重新生成或安装整个程序就可以应用更新。

DLL 依赖项

      当某个程序或 DLL 使用其他 DLL 中的 DLL 函数时,就会创建依赖项。 因此,该程序就不再是独立的,并且如果该依赖项被损坏,该程序就可能遇到问题。 例如,如果发生下列操作之一,则该程序可能无法运行: 

  • 依赖 DLL 升级到新版本。
  • 修复了依赖 DLL。
  • 依赖 DLL 被其早期版本覆盖。
  • 从计算机中删除了依赖 DLL。

这些操作通常称为 DLL 冲突。 如果没有强制实现向后兼容性,则该程序可能无法成功运行。

下表说明了为了帮助最大限度地减少依赖性问题而在 Microsoft Windows 2000 和较高版本的 Windows 操作系统中引入的更改: 

  • Windows 文件保护
    在 Windows 文件保护中,操作系统禁止未经授权的代理更新或删除系统 DLL。 因此,当程序安装操作尝试删除或更新被定义为系统 DLL 的 DLL 时,Windows 文件保护将寻找有效的数字签名。

                     

  • 专用 DLL
    通过专用 DLL 可以使程序避免遭受对共享 DLL 进行的更改。 专用 DLL 使用版本特定信息或空 .local 文件来强制要求程序所使用的 DLL 的版本。 要使用专用 DLL,请在程序根文件夹中找到 DLL。 然后,对于新程序,请向该 DLL 中添加版本特定信息。 对于旧程序,请使用空 .local 文件。 每个方法都告诉操作系统使用位于程序根文件夹中的专用 DLL。

DLL 故障排除工具

  • Dependency Walker

ependency 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 将位于以下目录中:

http://www.dependencywalker.com/(下载地址)

  • 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) 版本。

有关 DUPS 工具的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

247957 使用 DUPS.exe 解决 DLL 兼容性问题

  • DLL 帮助数据库

DLL 帮助数据库帮助您查找由 Microsoft 软件产品安装的特定版本的 DLL。 有关 DLL 帮助数据库的更多信息,请访问下面的 Microsoft 网站:

http://support.microsoft.com/dllhelp/

 

(http://www.pc6.com/wenjian/dll/)

这篇关于什么是dll的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1148008

相关文章

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

用VB创建开始菜单快捷方式(无需其他DLL)

Option Explicit   Private Sub Command1_Click()   CreateProgManGroup Me, "测试", "test.grp"   CreateProgManItem Me, "d:\ghost.exe", "Ghost"   CreateProgManItem Me, "d:\setupQQ.exe", "QQ"   End

六种msvcp110.dll丢失修复的方法分享,有效快速修复msvcp110.dll丢失

在日常使用电脑的过程中,我们可能会遭遇各种程序运行错误,其中“msvcp110.dll丢失”是一种非常常见的问题。这个问题通常发生在尝试启动某些程序时,系统会弹出一个错误消息,提示“程序无法启动,因为计算机缺少msvcp110.dll”,这可能会让用户感到困惑和无助。幸运的是,这个问题有多种解决方法,本文将指导你通过几种简单的步骤来修复“msvcp110.dll丢失”的问题,让你的程序回到正常运行

由于找不到python37.dll,无法继续执行代码问题解决

由于各种原因系统删掉了python37.dll,只要重新下载python37.dll解压复制到C:\Windows\System32\这里就行了,地址:https://cn.dll-files.com/python37.dll.html 只要电脑上丢失或损坏文件,遇到过“无法找到****.dll文件…”的消息弹窗,都可以上https://cn.dll-files.com/重新下载回来

Unity数据持久化 之 使用Excel.DLL读写Excel表格

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ 终于找到一个比较方便容易读表的方式了,以前用json读写excel转的cvs格式文件我怎么使用怎么别扭,觉得太繁琐了 1.Excel.Dll       Excel.dll 是一个库文件,通常用于在C#等编程语言中处理Excel文件。它并不是一个插件,

尝试制作和使用lib与dll

前言 关于lib和dll这两种库的概念,网上已有很多讨论可以参阅。这篇博客主要记录我动手尝试用VS来制作lib和dll并随后使用的过程。 参考: lib和dll的区别与使用 - LuckyAnnika - 博客园 C++编写一个简单的DLL - _No.47 - 博客园 dumpbin工具 在开始之前,需要介绍一下VS提供的dumpbin工具,这个工具可以获取一些lib与dll中的信息。 它

修复msvcp100.dll文件丢失的问题,如何高效率修复msvcp100.dll

在Windows操作系统中,msvcp100.dll是Microsoft Visual C++ 2010 Redistributable Package的一部分,它支持多种与C++库相关的关键功能。这个文件对于许多程序的正常运行非常重要。有时用户可能会遇到msvcp100.dll文件缺失的问题,这会导致某些程序无法启动或运行错误。本文将探讨一系列有效的解决方案,帮助用户修复msvcp100.dll

vs环境下C++dll生成和使用

动态库和静态库: 动态库:全名动态链接库,用于将你的函数封装,让别人只能调用,不能看你的实现代码。由引入库和dll组成:引入库包含导出的函数和变量名,dll包含实际的函数和数据,运行时加载访问dll文件。  Windows API中的所有函数都封装在dll里面,最重要的三个: Kernel32.dll:包含管理内存、进程和线程的各个函数。User32.dll:包含用于执行用户界面任务,如窗口和

#error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version

昨天编译文件时出现了Building MFC application with /MD[d] (CRT dll version)requires MFC shared dll version~~~~的错误。   在网上很容易找到了解决的方案,公布如下:   对着你的项目点击右键,依次选择:属性、配置属性、常规,然后右边有个“项目默认值”,下面有个MFC的使用,选择“在共享 DLL 中使