这可能是一个非常棘手的问题,但是在当今的Web应用程序开发世界中,许多程序员不需要过多地处理dll,因此不必理会它们的用途。
那么什么是dll?
- 它是干什么用的?
- 它是如何工作的?
- 您如何创建一个?
- 在什么情况下创建一个合适的?
有人告诉我dll用于存储函数库,但是除此之外,我所知不多。希望这里有人能启发我,让我终于可以不再怀疑Windows目录中的所有.dll文件在做什么。
这可能是一个非常棘手的问题,但是在当今的Web应用程序开发世界中,许多程序员不需要过多地处理dll,因此不必理会它们的用途。
那么什么是dll?
有人告诉我dll用于存储函数库,但是除此之外,我所知不多。希望这里有人能启发我,让我终于可以不再怀疑Windows目录中的所有.dll文件在做什么。
Answers:
DLL是动态链接库。它是代码和/或数据的集合,可以由多个应用程序(或其他库/模块)使用。
因此,例如,库中提供了用于处理文件,使用GUI组件等的常用方法,因此多个应用程序可以使用相同的功能。这不仅减少了多次构建相同内容的需求,而且还确保了例如应用程序之间的通用对话框相同。
库可以在运行时加载,因此可以在不同的并发应用程序之间共享。这称为动态链接。
在某些情况下,该库可以包含在应用程序本身中。这称为静态链接。静态链接使部署更容易,但以灵活性为代价,因为不同的应用程序将分别加载DLL的相同副本。
但是,静态链接并不总是一种选择。例如,您不能静态链接.NET应用程序。用户必须具有.NET库才能运行.NET应用程序,并且库(或在.NET中称为程序集的程序集)将在运行时加载。
DLL由用于创建应用程序的相同工具创建。具体细节在很大程度上取决于所使用的工具。
DLL(动态链接库)文件可以描述为小型“子程序”,意在帮助较大的程序正常运行。它们提供了一种将各种硬件和软件资源(在其运行时会话中的各个点)链接到它们所基于的主要可执行程序的方法,并且它们是“按需分配”的。这样就无需在首次运行该程序时将与主要可执行程序有关的所有事情加载到计算机的RAM(随机存取存储器)上。
DLL承载的软件资源包括各种代码功能的代码,这些代码实际上并不需要使程序保持运行:也就是说,仅需要在给定的计算会话期间的特定时间调用这些函数,而实际上甚至不需要被称为。当程序第一次运行时,将那些功能(对于给定的程序,可能有很多功能)加载到计算机的RAM上,然后在整个会话期间将其保留在计算机的RAM上,这将浪费RAM空间-被认为是在溢价。
主要进步:
DLL的开发是计算领域的重大进步,因为在首次使用程序时,与程序相关的所有内容(包括很少使用的功能)都必须先加载到RAM上,然后才能使用。这导致计算效率极低,各种程序的速度降低。由于运行在RAM上的压力很大,通过运行几个简单的程序来执行多任务也非常困难。
注意事项:
DLL通常是特定于版本的。例如,对于程序的版本1(或视情况而定的一种编程语言)而言,效果较好的版本可能不适用于版本2。通常的规则是,旧版本中的DLL往往无法正常工作。较新的版本很好用,但是较新版本的程序通常可以与较旧版本的程序或编程语言一起很好地工作。
动态链接库。
举一个例子,如果您将别人的DLL加载到您的应用程序中,则可以使用其中的一些编程。
您可以加载生成随机数的DLL,该随机数始终以“ 5”开头。
在您的程序中,您可以调用CrazyDLL.GenerateRandomNumbersSorta(),它将返回该数字。
对于一个真实的例子,我有一个DLL,它结合了4个文本框(您将使用它们来键入IP地址),并且它仅自动接受小于256的数字,并处理按退格键以跳到上一个文本框。
我已经用该代码创建了一个DLL,现在要做的就是拖放更多这些IP地址文本框集合,而不必一遍又一遍地重复所有这些代码。
相同的DLL还具有将IP地址转换为十六进制字符串以及其他有用代码的功能。
从MSDN库:
动态链接库(DLL)是一个模块,其中包含可以由另一个模块(应用程序或DLL)使用的功能和数据。
DLL =动态 加载链接库。如您所知,它基本上是函数,C ++类和/或全局变量的集合。您可以静态地加载DLL(即,操作系统在程序启动时自动加载DLL),也可以动态地加载(您的程序明确地加载它),此时DLL中的函数和内容对程序可用。
创建一个类似于创建一个EXE,除了不需要一个 main()
功能。有链接程序指令可以告诉链接程序创建DLL而不是EXE。
您要执行此操作的主要原因是将一些代码封装在一个地方,并从多个exe使用它,而不是将代码链接到每个exe。
出于某种历史原因,您的exe可能会更小,因为某些代码实际上位于其他文件中。这意味着您的exe占用的内存空间可能较小。在现代系统上,这不是以前的问题,尽管在Windows Mobile上可能仍然是问题。