究竟是如何做到的DLL文件? 似乎有一个可怕的很多人,但我不知道它们是什么以及它们如何工作。
那么,什么是与他们的交易?
究竟是如何做到的DLL文件? 似乎有一个可怕的很多人,但我不知道它们是什么以及它们如何工作。
那么,什么是与他们的交易?
什么是DLL?
动态链接库(DLL)■像EXE文件,但他们不直接执行。 他们是在类似的Linux / Unix到.so文件。 也就是说,DLL是MS的实现共享库。
DLL是太像一个EXE的文件格式本身是一样的。 这两个EXE和DLL是基于可移植可执行(PE)文件格式。 DLL文件还可以包含COM组件和.NET库。
什么是一个DLL包含哪些内容?
一个DLL包含函数,类变量,用户界面和资源(如图标,图像,文件,...),一个EXE或DLL的其他用途。
库的类型:
在几乎所有的操作系统中,有两种类型的库。 静态库和动态库。 在窗口中的文件扩展名如下:静态库(.LIB)和动态库(.dll)。 主要的区别是静态库链接到在编译时可执行文件; 而动态链接库没有联系,直到运行时。
更多关于静态和动态库:
你通常不看,虽然您的计算机上的静态库,因为静态库直接嵌入模块(EXE或DLL)的内部。 动态库是一个独立的文件。
一个DLL可以在任何时候进行改变,仅在运行时加载时的EXE明确加载DLL。 一旦EXE文件内编译的静态库不能改变。 一个DLL可以单独而不更新EXE本身进行更新。
加载DLL:
一种程序,在启动时加载一个DLL,通过Win32 API的调用LoadLibrary,或当它是另一个DLL的依赖关系。 程序使用GetProcAddress的加载功能或LoadResource加载资源。
延伸阅读:
请检查MSDN或维基进一步阅读。 这个答案也来源。
什么是DLL?
DLL文件是可以包含可执行代码和像图像等不同的应用程序资源的二进制文件,这些不能直接执行,但是应用程序将它们加载到什么时候都需要(或一次启动时)他们。
他们是重要的?
大多数应用程序将加载它们需要在启动时的DLL文件。 如果其中任何一个都没有找到,系统将不能够在所有的启动进程。
DLL文件可能需要其它的DLL文件
在一个应用程序需要一个DLL文件的方式,一个DLL文件可能依赖于其他DLL文件本身。 如果没有发现相关性的链条,这些DLL文件中的一个,该应用程序将不会加载。 这是使用任何的Dependency Walker工具容易调试,喜欢的Dependency Walker 。
有这么多的人在系统文件夹
因为它们的共享代码/资源标准形式大部分系统功能被暴露在用户程序的DLL文件的形式。 每个功能,使得只有所需的DLL文件将被加载,从而减少系统上的存储器约束在不同的DLL文件分开存放。
已安装的应用程序也使用DLL文件
DLL文件也变得如上所述物理分离的功能性的形式。 良好的应用也尝试,直到他们绝对需要,从而降低了内存需求不加载DLL文件。 这也导致应用程序有很多的DLL文件出货。
DLL地狱
然而,有时系统升级往往打破其他程序时,有共享的DLL文件,并在需要它们的程序之间的版本不匹配。 系统检查点和DLL缓存等已经从M $来解决这个问题的倡议。 .NET平台可能不会面临这个问题的。
我们怎么知道什么是DLL文件中?
您必须使用外部工具像DUMPBIN或者Dependency Walker中,这将不仅显示什么公开可见的功能(称为出口)都包含在DLL文件中的内容以及其他DLL文件它需要和从这些DLL文件,此DLL文件导出取决于。
我们如何创建/使用它们?
从你的供应商请参阅编程文档。 对于C ++,指的LoadLibrary在MSDN。
比方说,你正在使用的库中找到某些功能的可执行文件。
如果您正在使用该库是静态的 ,链接器将直接从库中复制对象的代码实现这些功能,并把它们插入到可执行文件。
现在,如果这个可执行文件运行它拥有它的每一件事情,所以可执行文件加载器只是用来加载到内存中并运行它。
如果库是动态链接器将无法插入对象代码,而是将插入一个存根基本上说,这个功能就设在这个DLL在这个位置。
现在,如果这个可执行文件运行时,可执行文件的位缺失(即存根),所以装载机经过可执行固定了丢失的存根。 只有在所有的存根都解决了将可执行文件被允许运行。
要看到这个动作删除或重命名的DLL,看如何当您尝试运行可执行文件加载器将报告缺少DLL的错误。
因此,名称动态链接库 ,链接过程的一部分被动态地在运行时可执行文件加载器来完成。
其中最后一点,如果你不链接到DLL那么没有存根会被链接器插入,但Windows仍然提供GetProcAddress的API,允许你加载执行DLL函数入口点长的可执行文件启动后。
DLL(动态链接库)和SLS(共享库,UNIX下当量)只是其可动态地链接到在加载时可执行的可执行代码库。
静态库被插入在编译时可执行并从该点是固定的。 他们增加了可执行文件的大小,并不能共享。
动态库具有以下优点:
1 /它们在运行时加载,而不是编译时间,使他们能够独立可执行文件(所有那些花哨的窗口和对话框您在Windows看到来自DLL文件,以便您的应用程序的外观和感觉可以更改,恕不您的更新不必重写它)。
2 /因为他们是独立的,该代码可以在多个可执行文件共享 - 这样可以节省内存,因为,如果你正在运行一个单一的DLL 100级的应用程序,有可能只在内存中的DLL的一个副本。
其主要缺点是优点#1 - 有DLL的改变独立应用程序可能会导致您的应用程序停止运行或开始在一个奇怪的方式表现。 DLL版本往往不会在Windows下管理的非常好,这导致古怪为“DLL地狱”。
DLL文件包含的导出表是可以通过调用程序中查找到的符号列表。 的符号是通常与功能C调用约定 ( __stcall )。 导出表还包含了函数的地址。
有了这些信息,调用程序可以调用该DLL中的函数,即使它没有在编译时访问DLL。
引入动态链接库有一些更多的信息。
http://support.microsoft.com/kb/815065
DLL是包含代码和数据可以由一个以上的程序在同一时间可以使用的库。 例如,在Windows操作系统中,DLL COMDLG32执行通用对话框相关的功能。 因此,每个程序都可以使用包含在此DLL功能来实现的打开对话框。 这有助于促进代码重用和内存使用效率。
通过使用DLL,程序可以被模块化成单独的组件。 例如,计费用程序可以通过模块出售。 每个模块可以在运行时如果安装该模块被加载到主程序。 因为模块是分开的,该程序的加载时间是快,以及当被请求的功能的模块仅加载。
此外,更新更容易应用到每个模块,而不影响程序的其他部分。 例如,你可能有一个工资计算程序,每年的税率变化。 当这些更改被隔离到一个DLL,你可以申请一个更新,而无需建立或重新安装整个程序。
http://en.wikipedia.org/wiki/Dynamic-link_library
DLL是一个文件扩展名和最受欢迎的用于保存多个代码和程序Windows程序“动态链接库”文件格式。 软件和游戏的DLL文件的基础上运行; DLL文件的创建,使多个应用程序可以同时使用他们的信息。
如果你想获得有关DLL文件的详细信息或遇到任何错误阅读下面的文章。 https://www.bouncegeek.com/fix-dll-errors-windows-586985/
DLL(动态链接库)包含一个或多个应用程序或服务使用的资源。 它们可以包含类,图标,字符串,对象的接口,几乎任何一个开发人员需要存储,除了一个UI。