什么是DLL?

这可能是一个很难理解的问题,但是在当今Web应用程序开发的世界里,很多程序员不需要处理dll的东西,所以不用费心去了解它们的用途。

那么什么是DLL?

  1. 它是干什么用的?
  2. 它是如何工作的?
  3. 你如何创build一个?
  4. 在什么情况下创build一个合适的?

我被告知,dll被用来存储函数库,但除此之外,我不太了解。 希望在这里有人能够启发我,所以我终于可以停止想知道我的Windows目录中的所有这些.dll文件在做什么。

DLL是一个dynamic链接库。 它是代码和/或数据的集合,可以被多个应用程序(或其他库/模块)使用。

因此,例如处理文件,处理GUI组件等常见方法在库中可用,因此多个应用程序可以使用相同的function。 这不仅减less了多次构build相同内容的需求,而且还确保了例如应用程序之间的通用对话框相同。

库可以在运行时加载,从而在不同的并发应用程序之间共享。 这被称为dynamic链接。

在某些情况下,库可以包含在应用程序本身中。 这被称为静态链接。 静态链接使得部署变得更加容易,因为不同的应用程序将每个都加载相同的DLL副本。

但是,静态链接并不总是一个选项。 例如,你不能静态链接一个.NET应用程序。 用户必须具有.NET库才能运行.NET应用程序,并且在运行时加载库(或在.NET中调用的程序集)。

DLL是由用于创build应用程序的相同工具创build的。 具体的细节很大程度上取决于所使用的工具。

DLL =dynamic链接库

这个名字实际上是描述他们完成了什么。

图书馆

让您将特定问题域的代码隔离到一个位置。 然后在多个应用程序中共享这个 该库可以随时换出另一个来修复错误或添加function。

链接

您可以将库“链接”到应用程序,以便库中的逻辑不会直接编译到应用程序中。

dynamic

该库可以按需加载。 而不是加载一个庞大的单一EXE到内存中,操作系统只能加载所需的部分。 另外,如果在应用程序之间共享DLL,操作系统可以优化库的加载方式,并在应用程序之间共享。

DLL(dynamic链接库)文件可以被描述为小型的“子程序”,这是为了帮助更大的程序运行良好。 它们提供了一种方式,在“需要时”的基础上,将各种硬件和软件资源(在其运行时会话中的各个点)连接到它们所基于的主要可执行程序。 当程序第一次运行时,这消除了将主要可执行程序的所有内容加载到计算机的RAM(随机存取存储器)中的需要。

由DLL携带的软件资源包括用于保持程序运行所不需要的各种程序function的代码:即,在给定计算会话期间的特定时间仅需要调用的function,甚至可能甚至不需要被称为。 当程序第一次运行,然后在整个会话期间将它们保留在那里时,将这些function(对于给定的程序可以有相当多的这些function)加载到计算机的RAM上会浪费RAM空间 – 这被认为是在一个溢价。

重大进步:

DLL的开发是计算的一个重大进展,因为在它们可用之前,程序第一次加载时,所有与程序有关的事情(包括很less使用的函数)都必须加载到RAM中。 这导致计算效率非常低下,各种程序的速度都较慢。 通过运行几个简单的程序来完成多任务也是非常困难的,因为随之而来的内存紧张。

注意事项:

DLL通常是版本特定的。 对于版本1的程序(或者编程语言,可能就是这样)而言,那些工作良好的版本可能不适合版本2.一般规则是旧版本的DLL往往无法工作以及更新的版本,但是新版本的程序或编程语言通常可以很好地工作。

dynamic链接库。

给你一个例子,如果你有其他人的DLL加载到你的应用程序,你可以使用它的编程位。

您可以加载一个生成总是以“5”开始的随机数的DLL。

在你的程序中,你可以调用CrazyDLL.GenerateRandomNumbersSorta(),它会返回数字。

对于一个真实世界的例子,我有DLL,它结合了4个文本框(你可以使用这些键入IP地址),它只会自动接受小于256的数字,并按下退格键跳转到上一个文本框。

我已经创build了一个包含该代码的DLL,现在我只需拖放更多的IP地址文本集合,而不必一遍又一遍地重复所有的代码。

同样的DLL也具有将IP地址转换为hexstring的function,以及其他有用的代码。

来自MSDN Library :

dynamic链接库(DLL)是一个模块,其中包含可由另一个模块(应用程序或DLL)使用的函数和数据。

DLL =dynamic加载链接库。 正如你所知,它基本上是一个函数,C ++类和/或全局variables的集合。 您可以静态加载DLL(即在您的程序启动时自动加载它)或dynamic加载(您的程序显式加载它),此时DLL中的函数和东西可用于您的程序。

创build一个类似于创build一个EXE,除了不需要是一个main()函数。 有链接器指令告诉链接器创build一个DLL,而不是一个EXE。

你想这样做的主要原因是封装一些代码在一个地方,并从多个exe中使用它,而不是将代码链接到每个。

一个有点历史的原因是,你的EXE可以更小,因为一些代码是物理位于不同的文件。 这意味着您的exe占用的内存空间可能会更小。 在现代系统上,这个问题不像以前那么严重,尽pipe在Windows Mobile上它仍然是一个问题。

dynamic链接库(也被写成unhyphenated)或DLL,是Microsoft在Microsoft Windows和OS / 2操作系统中共享库概念的实现。 这些库通常具有文件扩展名DLL,OCX(用于包含ActiveX控件的库)或DRV(用于传统系统驱动程序)。 DLL的文件格式与Windows EXE文件(即32位和64位Windows的可移植可执行文件(PE))以及16位Windows的新可执行文件(NE)相同。 和EXE一样,DLL可以包含任何组合的代码,数据和资源。

维基百科页面上的DLL几乎所有的信息,你想要的。

在Microsoft Windows和OS / 2操作系统中,dynamic链接库(也用连字符编写)或DLL是微软对共享库概念的实现。 这些库通常具有文件扩展名DLL,OCX(用于包含ActiveX控件的库)或DRV(用于传统系统驱动程序)。 DLL的文件格式与Windows EXE文件(即32位和64位Windows的可移植可执行文件(PE))以及16位Windows的新可执行文件(NE)相同。 和EXE一样,DLL可以包含任何组合的代码,数据和资源。 在更广义的术语中,任何具有相同文件格式的数据文件都可以称为资源DLL。