延迟加载 DLL 和关联的 .lib 文件

soh*_*hum 4 c++ dll linker static-libraries delay-load

我试图在我的应用程序中延迟加载 wintrust.dll 和 crypt32.dll (这些用于在 DLL 中执行数字签名/发布者检查)。我用的是VS2008。将这两个 DLL 添加为项目属性链接器部分的延迟加载属性中的条目后,我仍然收到 LNK4199 警告,表示未从 DLL 中加载任何内容,并且 LNK2019 错误无法解析 WinVerifyTrust 等符号。

将以下内容添加为“附加依赖项”可以缓解此问题:crypt32.lib 和 wintrust.lib。我现在没有遇到链接问题。但是,我想知道如何确保它没有链接到静态库?由于潜在的许可问题,我不想链接到静态库。我想动态加载 Windows 中安装的 DLL,并希望 DelayLoad 可以帮助我做到这一点,而不必求助于 LoadLibrary 和 GetProcAddress 函数调用。

任何有关所有不同库使用/链接选项的信息将不胜感激!

谢谢。

cas*_*nca 6

延迟加载并不能让您免于链接到 lib 文件。通常,DLL 在应用程序启动后立即加载。延迟加载只是将其延迟到您第一次从该 DLL 调用函数为止。无论哪种方式,您都需要链接到 lib 文件,以便链接器可以验证您正在调用的函数是否确实存在于 DLL 中。

如果您不想链接到 lib 文件,唯一的出路是使用LoadLibraryGetProcAddress