不使用 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
如何在没有regsvr32的情况下注册glut32.dll?
当我将 .NET Standard 2.0 DLL 库与 .NET Framework 控制台应用程序一起使用时,如何设置依赖项?