DLL文件究竟是如何工作的?它们似乎有很多,但我不知道它们是什么,也不知道它们是如何工作的。
那么,他们是怎么回事?
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文件包含一个导出表,它是一个可以由调用程序查找的符号列表。这些符号通常是具有C调用约定的函数(__stcall)。导出表还包含函数的地址。
有了这些信息,调用程序就可以调用DLL中的函数,即使它在编译时没有访问DLL的权限。
介绍动态链接库有更多的信息。
根据微软
动态链接库是包含应用程序运行所需的数据、代码或资源的文件。这些文件是由windows生态系统创建的,可以在两个或多个应用程序之间共享。
当一个程序或软件在Windows上运行时,应用程序的工作方式在很大程度上取决于该程序的DLL文件。例如,如果一个特定的应用程序有几个模块,那么每个模块之间的交互方式由Windows DLL文件决定。
如果你想要详细的解释,查看这些有用的资源
什么是dll文件,关于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,并观察当您尝试运行可执行文件时,加载器将如何报告丢失DLL错误。
因此称为动态链接库,部分链接过程在运行时由可执行加载器动态完成。
最后提醒一下,如果你不链接到DLL,那么链接器就不会插入存根,但是Windows仍然提供了GetProcAddress API,允许你在可执行文件启动很久之后加载一个执行DLL函数入口点。
dll(动态链接库)包含一个或多个应用程序或服务使用的资源。它们可以包含类、图标、字符串、对象、接口以及开发人员需要存储的除UI之外的几乎任何东西。