gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:56 26 4
gpt4 key购买 nike

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

当我在此字段中指定“mydll.dll”时,我一直收到警告:没有从 mydll.dll 中找到导入,但是当我运行我的可执行文件时,它会提示找不到 mydll。 dll(暗示它确实需要从中导入一些东西),我被迫退出程序。

我最好的猜测是我应该在 Additional Dependencies 下同时指定“mydll.lib”,然后在 Delay 中指定“mydll.dll”或“mydll.lib”根据工作原理加载 DLL 文件。到目前为止,我尝试过的组合都没有效果,也没有足够明确地说明应该如何使用它。帮助!

次要问题征求意见(未回答):这是在自定义图像处理应用程序的上下文中完成的,该应用程序既可以从实时摄像机源运行,也可以从磁盘上预先录制的视频播放运行。当不存在相机 DLL 时,我们希望能够运行,但将输入源限制为仅预录视频。使用延迟加载的 DLL 是实现此目的的合理方法吗?

最佳答案

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

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

编译(如有必要)、链接(必要)、享受。 microsoft documentation 均未建议额外的混淆 #pragma 代码和 this CodeProject explanation是必要的。

至于这是否是应对 DLL 实际上是可选的情况的合理方法,人们会有自己的看法。但它看起来肯定比手动使用 LoadLibraryGetProcAddress 或创建某种虚拟 DLL 简单得多,该虚拟 DLL 部署在比 DLL 通常更靠搜索路径的文件夹中被发现。 this approach which is applicable in C# 也简单得多.这些是我所知道的唯一选择。

关于c++ - 延迟加载的 DLL - 我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27030238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com