延迟加载DLL

Zai*_*mir 6 c++ windows dll delayed-execution visual-studio

我迫切需要帮助,我需要在Visual Studio中管理应用程序依赖项.应用程序仅在特定版本的Windows上链接到DLL,例如Windows 7.在其他环境中,不应加载DLL.我将如何使用DLL延迟加载实现这一目标,因为这个主题对我来说是全新的,并且没有任何关于此特定事项的在线参考.

问候

Goz*_*Goz 11

MSDN 在这里有一个很好的描述.

基本上你正在做的是设置有问题的DLL在延迟加载部分.在您调用该DLL中的函数之前,它将不会加载该DLL.

从以上链接:

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(延迟加载导入)链接器选项延迟加载DLL (Visual C++提供的默认实现).辅助函数将通过为您调用LoadLibrary和GetProcAddress在运行时加载DLL.

在下列情况下,您应该考虑延迟加载DLL:

您的程序可能无法调用DLL中的函数.

DLL中的函数可能直到程序执行后才被调用.

可以在构建.EXE或.DLL项目期间指定DLL的延迟加载.延迟加载一个或多个DLL的.DLL项目本身不应该在Dllmain中调用延迟加载的入口点.


xto*_*ofl 8

您的项目可以指定它依赖的dll应该在需要时加载,方法是在Linker/Input/Delay Loaded DLLs字段中指定它.对于不同的构建配置,此设置可能不同.

  • 这是延迟加载的重点:它是配置的东西,而不是代码的东西. (5认同)