gpt4 book ai didi

c - C 中的 DLL(绝对)基础知识

转载 作者:行者123 更新时间:2023-11-30 19:20:49 27 4
gpt4 key购买 nike

我一直想学习如何操作.DLL。我正在寻找教程,但找不到一个可以逐行向我解释所有内容的教程。如果我有机会找到一些东西,它不会是 C 语言的(我正在寻找 C 语言。而不是 C++ 语言。)

最佳答案

我将大致解释一下它们是如何工作的。对于整个故事,请从 MSDN documentation of DLLs 开始。 。另请阅读 C 编译器的文档,了解有关如何创建和使用它们的具体详细信息。当您遇到问题时,请通过支持代码向 SO 提出具体问题,以便我们提供更多帮助。

在最简单的层面上(并故意省略细节),DLL 是一个函数集合,可以在运行时使用 LoadLibrary() 加载到进程的内存空间中。并随后被进程调用。

DLL 文件本身的格式与普通 Windows 可执行文件类似,但它没有 WinMainmain,因此如果没有容器进程就无法调用。因此它是使用链接器创建的,就像任何其他可执行文件一样。 (这是一个小谎言。实际上有一个名为 DllMain() 的入口点,但它用于高级功能,在加载和卸载 DLL 时调用,并且仍然不允许直接从命令提示符或通过 CreateProcess() 或类似的 API 调用“执行”。)

DLL 可以在运行时自动加载。这是最常见的形式,允许每个程序从单个公共(public)副本加载 C 运行时库。为此,您只需将应用程序链接到正确的库和选项,系统就会负责加载 DLL 并修复指向它的所有符号。

DLL 也可以在运行时加载。这样做通常是为了允许扩展现有应用程序。 Windows 屏幕保护程序就是一个典型的例子。 .SCR 文件实际上只是一个重命名的 DLL,它导出提供屏幕保护程序功能的某些函数。窗口管理器在运行时查找配置的屏幕保护程序,将其 .SCR 文件作为 DLL 加载,并调用它提供的函数。

通过调用LoadLibrary()加载DLL,然后通过GetProcAddress()找到它包含的函数的地址。 。请注意,知道如何调用该函数完全是调用应用程序的责任,并且有许多有趣的方法可能会出错。最明显的情况是,您必须提供 DLL 中函数所需的正确类型的预期参数数量。

发明 COM 的原因之一是提供一个框架,允许 DLL 描述它提供的函数,并允许应用程序询问任何特定函数需要哪些参数。 .NET 框架提供了相同类型的内省(introspection)功能,但在许多方面更加成功。对于纯 C 程序和用纯 C 编写的 DLL,没有任何一种保护可用(这是另一个谎言,但用纯 C 实现 COM 非常 很棘手)。

关于c - C 中的 DLL(绝对)基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21175787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com