我怀疑可能是由于在运行Windows 7的两台计算机上加载了不同版本的CRT引起的错误。如何确定winsxs文件夹中加载了哪个版本的MSVCR90.dll?
我的程序是由另一个EXE加载的DLL。它是使用Visual Studio 2008 SP1编译的。
答案 0 :(得分:4)
Al Kepp回答说,你可以使用Dependency Walker,“Depends.exe”。对于动态加载的DLL,最好的方法是在加载库时对应用程序进行概要分析。
在Dependency Walker中打开EXE,不你的DLL。然后单击“配置文件 - >开始分析”。如果应用程序需要参数,您可以在打开的窗口中提供它们,否则只需单击“确定”即可启动该程序。程序打开后,以正常方式使用它,以便加载DLL。现在您的DLL已加载,您应该能够在Dependency Walker中浏览树以查看正在使用哪些版本的CRT。
如果看不到版本,请单击“C:\”按钮确保树中显示完整路径。
您还可以通过检查清单来查看应用程序或库请求的CRT版本,清单通常但不总是包含在DLL或EXE中。在Visual Studio中,单击“文件 - >打开 - >文件...”并选择EXE或DLL。打开RT_MANIFEST资源,您应该会看到一些XML,它将CRT列为依赖项和版本。
答案 1 :(得分:1)
在DLL文件中使用这些语言库的大多数应用程序仅使用Windows目录中这些DLL的最新版本。如果由于某种原因需要某些特定版本,最简单的方法就是将这些正确的文件放在与exe相同的目录中。
您可以使用Dependency Walker应用程序查看在启动时将哪些DLL文件加载到您的进程中。您可以从Microsoft站点免费下载。