我试图在我的应用程序中延迟加载wintrust.dll和crypt32.dll(这些用于在DLL中执行数字签名/发布者检查)。我正在使用VS2008。在我的项目属性的链接器部分的延迟加载属性中添加这两个DLL作为条目后,我仍然收到LNK4199警告,没有从DLL加载任何内容,LNK2019错误无法解析WinVerifyTrust等符号。
将以下条目作为条目添加到Additional Dependencies可以缓解此问题:crypt32.lib和wintrust.lib。我现在没有链接问题。但是,我想知道的是如何确保它没有链接到静态库?由于潜在的许可问题,我不想链接到静态库。我想动态加载Windows中安装的DLL,并希望DelayLoad可以帮助我做到这一点,而不必求助于LoadLibrary和GetProcAddress函数调用。
非常感谢有关所有不同库使用/链接选项的任何信息!
感谢。
答案 0 :(得分:3)
这些没有静态.lib。 SDK库始终是导入库,而不是静态.libs,因为相应的Windows API存在于DLL中。不用担心这个。
答案 1 :(得分:2)
延迟加载不会让您无需链接到lib文件。通常,只要应用程序启动,就会加载DLL。延迟加载只会将此延迟,直到您第一次从该DLL调用函数。无论哪种方式,您都需要链接到lib文件,以便链接器可以验证您调用的函数是否实际存在于DLL中。
如果您不想链接到lib文件,那么唯一的出路就是使用LoadLibrary
和GetProcAddress
。
答案 2 :(得分:2)
一个可以帮助您确定事物是否按预期链接的工具是DependecyWalker:http://www.dependencywalker.com/ - 特别是在延迟加载的情况下,它用特殊符号标记它们。
答案 3 :(得分:0)
您可能希望查看Win32 API方法LoadLibrary和GetProcAddress。