DLL文件到底是什么,它们是如何工作的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (70)

DLL文件到底是如何工作的?

提问于
用户回答回答于

什么是DLL?

动态链接库(DLL)就像EXE,但它们不能直接执行。它们与Linux / Unix中的.so文件类似。也就是说,DLL是MS的共享库的实现。

DLL非常像EXE,文件格式本身是相同的。EXE和DLL都基于可移植可执行文件(PE)文件格式。DLL也可以包含COM组件和.NET库。

什么是DLL包含?

DLL包含EXE或其他DLL使用的函数,类,变量,UI和资源(如图标,图像,文件等)。

图书馆的类型:

在几乎所有的操作系​​统上,都有两种类型的库。静态库和动态库。在Windows中,文件扩展名如下所示:静态库(.lib)和动态库(.dll)。主要区别在于静态库在编译时链接到可执行文件; 而动态链接库在运行时才会被链接。

更多关于静态和动态库:

您通常不会在计算机上看到静态库,因为静态库直接嵌入到模块(EXE或DLL)中。动态库是一个独立的文件。

一个DLL可以在任何时候被改变,并且只在EXE显式地加载DLL时在运行时加载。静态库在EXE中编译后无法更改。一个DLL可以单独更新而无需更新EXE本身。

加载DLL:

程序在启动时通过Win32 API LoadLibrary加载DLL,或者当它是另一个DLL的依赖项时。程序使用GetProcAddress加载函数或LoadResource来加载资源。

进一步阅读:

请查看MSDN维基百科进一步阅读。

用户回答回答于

什么是DLL?

DLL文件是可以包含可执行代码和资源(如图像等)的二进制文件。与应用程序不同,应用程序不能直接执行,但应用程序会在需要时加载它们(或者在启动过程中一次加载)。

它们很重要吗?

大多数应用程序会在启动时加载它们需要的DLL文件。如果找不到任何这些信息,系统将根本无法启动该过程。

DLL文件可能需要其他DLL文件

以与应用程序需要DLL文件相同的方式,DLL文件可能依赖于其他DLL文件本身。如果没有找到依赖关系链中的这些DLL文件之一,则应用程序将无法加载。这可以使用任何依赖性walker工具轻松调试

系统文件夹中有太多它们

大多数系统功能以DLL文件的形式暴露给用户程序,因为它们是共享代码/资源的标准形式。每个功能都分开保存在不同的DLL文件中,以便只加载所需的DLL文件,从而减少系统上的内存限制。

安装的应用程序也使用DLL文件

如上所述,DLL文件也成为物理分离功能的一种形式。良好的应用程序也会尝试不加载DLL文件,直到它们被绝对需要,这减少了内存需求。这也导致应用程序出现大量的DLL文件。

DLL地狱

但是,有时系统升级经常会在共享DLL文件与需要它们的程序之间存在版本不匹配的情况下中断其他程序。系统检查点和DLL缓存等已经从M $开始解决这个问题。.NET平台可能根本不会面临这个问题。

我们如何知道DLL文件里面有什么?

你必须使用像DUMPBIN或Dependency Walker这样的外部工具,它不仅能够显示DLL文件中包含哪些公开可见的函数(称为导出),还需要哪些其他DLL文件以及从这些DLL文件导出此DLL文件依赖于。

我们如何创建/使用它们?

请参阅供应商提供的编程文档。对于C ++,请参阅MSDN中的LoadLibrary

扫码关注云+社区