什么是DLL?

时间:2009-01-27 17:50:37

标签: dll

这可能是一个非常noobie的问题,但在今天的Web应用程序开发世界中,许多程序员不需要处理dll,因此不必费心去了解它们的用途。

那么什么是dll?

  1. 它用于什么?
  2. 它是如何运作的?
  3. 你如何创建一个?
  4. 在什么情况下创建一个合适的?
  5. 我被告知dll用于存储函数库,但除此之外我不太了解。希望有人在这里可以启发我,所以我终于不知道我的Windows目录中的所有.dll文件都在做什么。

6 个答案:

答案 0 :(得分:52)

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

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

库可以在运行时加载,因此可以在不同的并发应用程序之间共享。这称为动态链接。

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

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

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

答案 1 :(得分:26)

DLL =动态链接库

该名称实际上描述了他们所取得的成就。

<强>库

允许您将特定问题域的代码隔离到单个位置。然后在多个应用程序之间共享。可以随时将库替换为另一个库以修复错误或添加功能。

链接

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

<强>动态

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

答案 2 :(得分:9)

DLL (dynamic link library)文件可以被描述为小的“子程序”,旨在帮助更大的程序运行良好。它们提供了一种将各种硬件和软件资源(在其运行时会话中的不同点)链接到它们所基于的主要可执行程序的方法,这是“根据需要”的基础。这样就无需在首次运行程序时将主要可执行程序的所有内容加载到计算机的RAM(随机存取存储器)中。

DLL携带的软件资源包括用于保持程序运行不需要的各种程序功能的代码:即,在给定计算会话期间的某些时间只需要调用的函数,实际上可能是根本不需要被召唤。在程序首次运行时将这些功能(并且可能有相当数量的特定程序)加载到计算机的RAM中,然后在整个会话期间将它们保留在那里将浪费RAM空间 - 这被认为是在溢价。

重大进步:

  

DLL的开发是计算领域的一项重大进步,因为在它们可用之前,在程序首次加载时,必须将与程序(包括很少使用过的函数)有关的所有内容都加载到RAM中。这导致计算效率极低,各种程序的速度变慢。通过运行甚至几个简单的程序来执行多任务也非常困难,因为随之而来的RAM压力很大。

考虑:

  

DLL通常是特定于版本的。那些适用于程序版本1(或编程语言,可能是这种情况)的版本可能不适用于版本2.一般规则是旧版本中的DLL往往无法工作与较新版本一样好,但较新版本的版本通常可以与旧版本的程序或编程语言一起使用。

答案 3 :(得分:6)

动态链接库。

举个例子,如果你把别人的DLL加载到你的应用程序中,你可以使用它的一些编程。

您可以加载生成随机数的DLL,该随机数始终以“5”或其他内容开头。

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

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

我已经使用该代码创建了一个DLL,现在我所要做的就是拖放更多的IP地址文本框集合,而不必反复复制所有代码。

同样的DLL还具有将IP地址转换为十六进制字符串的功能,以及其他有用的代码。

答案 4 :(得分:1)

来自MSDN Library

动态链接库(DLL)是一个包含可供其他模块(应用程序或DLL)使用的函数和数据的模块。

答案 5 :(得分:1)

DLL =动态加载链接库。正如您所知,它基本上是函数,C ++类和/或全局变量的集合。您可以静态加载DLL(即操作系统在程序启动时自动加载它)或动态加载(程序显式加载它),此时DLL中的函数和内容可供您的程序使用。

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

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

有一个历史原因是你的exe可以更小,因为一些代码实际上位于不同的文件中。这意味着你的exe占用的内存空间可以更小。在现代系统上,这不像过去那样存在问题,尽管它仍然可能是Windows Mobile上的一个问题。