【问题标题】:How to run without a dependent DLL when that DLL is not used?不使用 DLL 时如何在没有依赖 DLL 的情况下运行?
【发布时间】:2012-02-02 10:56:37
【问题描述】:

我有一个针对第三方 DLL 编译的 VC++ 应用程序(当然是使用他们的 LIB 文件)。

问题在于,并非每个场景都涉及该 DLL 的代码,但如果缺少特定的 DLL,Windows 会拒绝启动应用程序。

我想知道如何解决这个限制。我希望应用程序只有在确实需要上述 DLL 时才会崩溃。

请忽略这个问题,应用程序在成功启动后崩溃是否是一种好习惯 - 我会处理它。

如何将 DLL 解析延迟到实际需要加载该 DLL 时?

谢谢。

【问题讨论】:

标签: c++ windows


【解决方案1】:

/DELAYLOAD linker option

Visual C++ 链接器现在支持延迟加载 DLL。这使您无需使用 Windows SDK 函数 LoadLibrary 和 GetProcAddress 来实现 DLL 延迟加载。

在 Visual C++ 6.0 之前,在运行时加载 DLL 的唯一方法是使用 LoadLibrary 和 GetProcAddress;操作系统会在加载可执行文件或使用它的 DLL 时加载 DLL。

从 Visual C++ 6.0 开始,当静态链接 DLL 时,链接器提供延迟加载 DLL 的选项,直到程序调用该 DLL 中的函数。

应用程序可以使用 /DELAYLOAD(延迟加载导入)链接器选项和辅助函数(Visual C++ 提供的默认实现)延迟加载 DLL。帮助函数将在运行时通过为您调用 LoadLibrary 和 GetProcAddress 来加载 DLL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 2013-01-05
    • 2020-01-25
    • 2016-10-07
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多