c++ - MSVCR100D.DLL 和 dependency walker

标签 c++ visual-studio-2010 assemblies .net-assembly

我将 MSVCR100D.DLL 放入 c:\windows\system32 文件夹,但 dependency walker 仍然提示它丢失了。有什么想法吗?

最佳答案

Dependency walker 已经很久没有更新了。我认为作者只是放弃了跟上 Windows 开发的步伐。特别是解决并排 list 查找规则是一个非常难以解决的问题。 SetDllDirectory() 无法静态解析。它对延迟加载的 DLL 不是很聪明,并且对作为转发器的 DLL 导出一无所知。您几乎总是会得到一个很大的缺失 DLL 列表,但实际上并没有缺失。

在 64 位操作系统上使用 32 位版本也不能很好地工作,您在 msvcr100d.dll 的情况下可能是错误的。对于 32 位可执行文件,必须将其复制到 c:\windows\syswow64,而不是 system32。您真的想要支持 msvcrt 版本 10 及更高版本的本地部署。换句话说,只需将 DLL 复制到与 EXE 相同的目录中。将它放在 Windows 系统目录中会使您暴露于过多的 DLL hell ,远远超过选择错误的系统目录。

如果您仍有问题,那么 SysInternals 的 ProcMon 是更好的工具。它生成的跟踪可以准确显示它在何处查找 DLL。

关于c++ - MSVCR100D.DLL 和 dependency walker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20068059/

相关文章:

c++ - 指向方法的指针

windows - 使用 VS2010 创建的二进制文件的最低操作系统是什么?

.net - 找不到引用的 DLL,因为 VS 命名空间错误

c# - 如何区分两个同名的 .snk 文件?

c++ - 如何捕获 C++ 命令行项目的应用程序关闭事件?

c++ - 识别所需的链接库

visual-studio-2010 - 无法使用针对x64的VC++/VS2010进行编译:LNK1158:无法运行cvtres.exe

c# - 使用同一程序集的不同版本

C++ 错误 No matching member function for call to addtoucheventlistener

c++ - 在 Catch2 中指定外部文本文件路径的最佳方式