DLL文件究竟是如何工作的?它们似乎有很多,但我不知道它们是什么,也不知道它们是如何工作的。

那么,他们是怎么回事?


当前回答

http://support.microsoft.com/kb/815065

A DLL is a library that contains code and data that can be used by more than one program at the same time. For example, in Windows operating systems, the Comdlg32 DLL performs common dialog box related functions. Therefore, each program can use the functionality that is contained in this DLL to implement an Open dialog box. This helps promote code reuse and efficient memory usage. By using a DLL, a program can be modularized into separate components. For example, an accounting program may be sold by module. Each module can be loaded into the main program at run time if that module is installed. Because the modules are separate, the load time of the program is faster, and a module is only loaded when that functionality is requested. Additionally, updates are easier to apply to each module without affecting other parts of the program. For example, you may have a payroll program, and the tax rates change each year. When these changes are isolated to a DLL, you can apply an update without needing to build or install the whole program again.

http://en.wikipedia.org/wiki/Dynamic-link_library

其他回答

什么是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:

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

进一步阅读:

详情请查阅MSDN或维基百科。这也是答案的来源。

dll(动态链接库)包含一个或多个应用程序或服务使用的资源。它们可以包含类、图标、字符串、对象、接口以及开发人员需要存储的除UI之外的几乎任何东西。

http://support.microsoft.com/kb/815065

A DLL is a library that contains code and data that can be used by more than one program at the same time. For example, in Windows operating systems, the Comdlg32 DLL performs common dialog box related functions. Therefore, each program can use the functionality that is contained in this DLL to implement an Open dialog box. This helps promote code reuse and efficient memory usage. By using a DLL, a program can be modularized into separate components. For example, an accounting program may be sold by module. Each module can be loaded into the main program at run time if that module is installed. Because the modules are separate, the load time of the program is faster, and a module is only loaded when that functionality is requested. Additionally, updates are easier to apply to each module without affecting other parts of the program. For example, you may have a payroll program, and the tax rates change each year. When these changes are isolated to a DLL, you can apply an update without needing to build or install the whole program again.

http://en.wikipedia.org/wiki/Dynamic-link_library

DLL文件包含一个导出表,它是一个可以由调用程序查找的符号列表。这些符号通常是具有C调用约定的函数(__stcall)。导出表还包含函数的地址。

有了这些信息,调用程序就可以调用DLL中的函数,即使它在编译时没有访问DLL的权限。

介绍动态链接库有更多的信息。

dll(动态链接库)和SLs(共享库,在UNIX下是等价的)只是可执行代码的库,可以在加载时动态链接到可执行文件。

静态库在编译时插入到可执行文件中,并从那时开始固定。它们增加了可执行文件的大小,并且不能共享。

动态库有以下优点:

1/它们是在运行时而不是编译时加载的,所以它们可以独立于可执行文件进行更新(你在windows中看到的所有漂亮的窗口和对话框都来自dll,所以你的应用程序的外观可以改变,而不必重写它)。

2/因为它们是独立的,所以代码可以在多个可执行文件之间共享——这可以节省内存,因为如果你运行100个应用程序,使用一个DLL,那么内存中可能只有一个DLL副本。

它们的主要缺点是优点#1 -让dll独立于应用程序更改可能会导致应用程序停止工作或开始以一种奇怪的方式运行。在Windows下,DLL版本控制往往不能很好地管理,这就导致了一个古怪的名字“DLL地狱”。