不使用 DLL 时如何在没有依赖 DLL 的情况下运行?

Posted

技术标签:

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

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

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

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

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

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

谢谢。

【问题讨论】:

可能重复***.com/q/1388388/395718 【参考方案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。

【讨论】:

以上是关于不使用 DLL 时如何在没有依赖 DLL 的情况下运行?的主要内容,如果未能解决你的问题,请参考以下文章

nmake / VC++ 2010:编译时不依赖 MSVCR100.dll

如何在不停止站点的情况下更新 ASP.Net 站点 dll

在没有类型库的情况下使用来自 C# 的 COM dll

如何在没有regsvr32的情况下注册glut32.dll?

在不重新编译整个应用程序的情况下升级依赖 DLL

当我将 .NET Standard 2.0 DLL 库与 .NET Framework 控制台应用程序一起使用时,如何设置依赖项?