3

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

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

非常感谢有关所有不同库使用/链接选项的任何信息!

谢谢。

4

4 回答 4

3

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

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

于 2010-10-14T18:57:00.090 回答
3

这些没有静态 .lib。SDK 库始终是导入库,而不是静态 .lib,因为相应的 Windows API 位于 DLL 中。无需担心这一点。

于 2010-10-14T18:58:09.993 回答
2

一个可以帮助您确定是否按预期链接的工具是 DependecyWalker: http: //www.dependencywalker.com/ - 具体来说,在延迟加载的情况下,它会用特殊符号标记它们。

于 2010-10-14T19:24:49.033 回答
0

您可能想查看 Win32 API 方法LoadLibraryGetProcAddress

于 2010-10-14T18:48:58.887 回答