在cpp文件中使用#pragma指定延迟加载dll

8
我有一个静态链接库,它使用了一些需要延迟加载的dll函数。因此,在我的可执行文件属性中,我已经在“Linker/Input/Delay Loaded DLLs”下添加了这个dll。由于它是一个静态库,所以我不能在库本身中添加此选项,因为它没有“Linker”属性页面。
现在,每当我在另一个可执行工具中使用此库时,我都需要再次添加延迟加载选项,这是我想避免的。我知道以前有一个用于此的#pragma命令。
#pragma comment(linker, "/DELAYLOAD:mydll.dll")

然而,对于我来说它不起作用,因为它显示了以下信息。
warning LNK4229: invalid directive '/DELAYLOAD:mydll.dll' encountered; ignored

除了LoadLibrary,还有其他的解决方法吗?

根据http://social.msdn.microsoft.com/Forums/vstudio/en-US/807606af-f7d7-4d9b-a9f3-062b23fddb2b/using-the-delayload-linker-switch-with-a-custom-dll中的说法,使用#pragma指令应该是可行的。 - Sebastian Redl
是的,我也这么想,但看起来它在我的VS2008中不起作用。 - spiritwolfform
1个回答

4

我在谷歌上进行了一些研究(像你一样),因为我一直对这些问题感兴趣。显然的链接是:

http://social.msdn.microsoft.com/Forums/vstudio/en-US/807606af-f7d7-4d9b-a9f3-062b23fddb2b/using-the-delayload-linker-switch-with-a-custom-dll

不幸的是,这是从2004年开始的,那是九年前,而且是一些早期版本的VS。

但更糟糕的是,我还发现了这个:

http://bytes.com/topic/net/answers/280580-delayload-pragma-fixed-whidbey

这是一年后的文章,听起来非常有道理:

不,这从来没有可靠地工作过。在6.0中允许它是一个错误。我们后来通过添加警告来修复了这个错误。

Ronald Laeremans

Visual C++团队

除了您提供的三个建议外,我知道没有其他方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接