DelayLoading DLL和关联的.lib文件

时间:2010-10-14 18:45:05

标签: c++ dll linker static-libraries delay-load

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

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

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

感谢。

4 个答案:

答案 0 :(得分:3)

这些没有静态.lib。 SDK库始终是导入库,而不是静态.libs,因为相应的Windows API存在于DLL中。不用担心这个。

答案 1 :(得分:2)

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

如果您不想链接到l​​ib文件,那么唯一的出路就是使用LoadLibraryGetProcAddress

答案 2 :(得分:2)

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

答案 3 :(得分:0)

您可能希望查看Win32 API方法LoadLibraryGetProcAddress