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

spi*_*orm 7 c++ visual-studio

我有一个静态链接库,它使用我需要延迟加载的dll中的一些函数.所以在我的可执行文件属性中,我添加了这个dll Linker/Input/Delay Loaded DLLs.我不能在lib本身中添加这个选项,因为它没有Linker属性页面(因为它是一个静态库)
所以现在每当我在另一个可执行工具中使用这个lib时,我需要一遍又一遍地添加延迟加载选项再次,我想避免.我知道这曾经是一个实用主义者

#pragma comment(linker, "/DELAYLOAD:mydll.dll")
Run Code Online (Sandbox Code Playgroud)

然而,它对我不起作用,因为它说

warning LNK4229: invalid directive '/DELAYLOAD:mydll.dll' encountered; ignored
Run Code Online (Sandbox Code Playgroud)

除了LoadLibrary之外,还有出路吗?

Mar*_*ott 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 中允许它是一个错误。我们后来通过添加警告修复了这一问题。

罗纳德·雷尔曼斯

视觉C++团队

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