延迟加载的DLL - 我错过了什么?

时间:2014-11-20 01:31:29

标签: c++ visual-studio dll

在MS Visual Studio中的链接器输入选项(多个版本)下面是字段Delay Loaded DLLs。这究竟是如何工作的?

当我指定" mydll.dll"在这个领域,我一直收到no imports found from mydll.dll的警告,但是当我运行我的可执行文件时,它抱怨它找不到mydll.dll(暗示它确实需要从中导入一些东西)并且我被迫退出该计划。

我最好的猜测是我应该同时指定" mydll.lib"在Additional Dependencies下,然后指定" mydll.dll"或" mydll.lib"在Delay Loaded DLLs文件中根据什么有效。到目前为止,我尝试过的任何组合都没有用,并且没有任何关于它应该如何使用的明确说明。救命啊!

开放评论的次要问题(不回答):这是在自定义图像处理应用程序的环境中完成的,该应用程序既可以从实时摄像机源运行,也可以从磁盘预先录制的视频播放运行。当没有相机DLL时,我们希望能够运行,但仅将输入源限制为预先录制的视频。使用延迟加载DLL是否有合理的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

对于每个延迟加载库,通过将库包含在Additional Dependencies中,正常链接库(与任何其他所需库一起)。还包括图书馆DelayImp.lib:例如" thislib.lib thatlib.lib otherlib.lib DelayImp.lib"

现在使用其DLL名称在Delay Loaded DLLs下指定每个延迟加载的库,并使用分号分隔多个条目,例如" thislib.dll; thatlib.dll"

编译(如有必要),链接(必要),享受。无需microsoft documentationthis CodeProject explanation建议的其他令人困惑的#pragma代码。

至于这是否是一种合理的方式来应对DLL实际上是可选的情况,人们会有他们的意见。但它似乎比手动使用LoadLibraryGetProcAddress要简单得多,或者创建某种虚拟DLL,它部署在搜索路径下方的文件夹中,而不是通常会找到DLL。 this approach which is applicable in C#也简单得多。这是我所知道的唯一选择。