windows - DLL 文件到底是什么,它们是如何工作的?

标签 windows winapi dll

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

那么,他们之间有什么关系呢?

最佳答案

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

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

进一步阅读:

请查看MSDNWikipedia进一步阅读。也是这个答案的来源。

关于windows - DLL 文件到底是什么,它们是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/124549/

相关文章:

java - JRuby:更改了 CLASSPATH 但没有效果

Java 类路径问题

c++ - 将文本绘制到 IDirect3DSurface9

c++ - 加载的共享库中的类冲突

python - 如何在 Windows 上运行 Airflow

windows - 如何使用批处理脚本更改clearcase_albd 帐户域名和密码?

c++ - 为对话框创建窗口类

c++ - EnumProcessModulesEx 无法返回错误代码 299 (ERROR_PARTIAL_COPY)

c# - ASP.net 无法加载 DLL 'Magick.NET-Q16-x64.Native.dll' : Access is denied.(HRESULT 异常:0x80070005 (E_ACCESSDENIED))

c# - 在 C# 中从内存流(视频)创建缩略图的最佳方法或库是什么?