加载我自己的 DLL 时找不到正确的 MSVCP140d.dll 依赖项,即使它存在于文件夹中

Can´t find proper MSVCP140d.dll dependency while loading my own DLL, even though its present in the folder

今天遇到问题

我正在构建自己的 DLL(C++),用作 OpenCities Map 的插件。在我的本地计算机(用于开发项目的同一台计算机)上,一切正常,我的 DLL 加载顺利,一切正常。然而,今天我在虚拟机上尝试了同样的事情,看看它在其他机器上是否也能正常工作。那是当我遇到问题说我的 DLL 由于某些依赖项而无法加载时(这是我的猜测)。

所以我开始调查。我使用 DependencyWalkerProccess Monitor 来查看 DLL 是如何加载的以及失败的原因。输出更让我困惑。

在我的本地机器上,当我打开 DLL 时,它还可以加载 MSVCP140D.dll 等依赖项。

我假设我什至可以看到它的内容和整个路径(当我单击以显示完整路径时)。进程监视器还显示它是从我在 Dependency walker 中看到的文件夹正确加载的。

起初我看到它在名为 MSVCP140D.dll 的大写 DLL 处失败,但随后它以正确的路径 (System32/msvcp140d.dll) 进入 SUCCESS。

现在是虚拟机(或其他计算机)。在这里,我在依赖项 walker 中看不到 msvcp140d.dll 的路径,因此我也看不到内容(或该 DLL 中的其他包含)

然后,即使在进程管理器中它也无法加载这些 DLL,即使它看起来是正确的路径。问题是,它寻找大写的 DLL 名称 MSVCP140d.dll(我可以在 system32 文件夹中真正看到 msvcp140d.dll),结果 NAME NOT FOUND。为什么它寻找 MSVCP140D.dll 而不是 msvcp140d.dll ?我的意思是,我希望像在我的本地机器上一样开始寻找小写 dll 版本,但它仍然只寻找大写版本。

我尝试安装 VS 可再发行组件、.NET 框架,但没有任何效果。我使用 VS17 构建项目,其 x64 DLL 还带有 /clr 和 /MDd 开关(如果有帮助的话)。

我会在特定的 OpenCities Map 论坛上提问,但我觉得这像是某种一般的建筑问题,我错过了。

你们有什么建议吗?感谢您的任何建议。

您不应基于运行时库 DLL 的调试版本发布代码。微软不支持这个。 DLL 名称不区分大小写,顺便说一句,所以这是一个转移注意力的问题。