2

我有一个错误,我怀疑可能是由于在运行 Windows 7 的两台计算机上加载了不同版本的 CRT 造成的。如何确定正在加载 winsxs 文件夹中的 MSVCR90.dll 版本?

我的程序是由另一个 EXE 加载的 DLL。它是使用 Visual Studio 2008 SP1 编译的。

4

2 回答 2

4

正如 Al Kepp 回答的那样,您可以使用 Dependency Walker,“Depends.exe”。对于动态加载的 DLL,最好的方法是在应用程序加载您的库时对其进行分析。

在 Dependency Walker 中打开 EXE,而不是您的 DLL。然后点击“Profile-->Start Profiling”。如果应用程序需要参数,您可以在打开的窗口中提供它们,否则只需单击“确定”启动程序。程序打开后,以正常方式使用它,以便加载您的 DLL。现在您的 DLL 已加载,您应该能够在 Dependency Walker 中浏览树以查看正在使用的 CRT 版本。

如果您看不到版本,请确保通过单击“C:\”按钮在树中显示完整路径。

您还可以通过检查清单来查看应用程序或库请求的 CRT 版本,清单通常但并不总是包含在 DLL 或 EXE 中。在 Visual Studio 中,单击“文件->打开->文件...”并选择 EXE 或 DLL。打开 RT_MANIFEST 资源,您应该会看到一些将 CRT 列为依赖项和版本的 XML。

于 2011-01-25T20:57:29.013 回答
1

大多数在 DLL 文件中使用这些语言库的应用程序只使用 Windows 目录中这些 DLL 的最新版本。如果您出于某种原因需要某个特定版本,那么您可以做的最简单的方法可能是将这些正确的文件与您的 exe 放在同一目录中。

您可以使用 Dependency Walker 应用程序查看启动时将哪些 DLL 文件加载到您的进程中。您可以从 Microsoft 网站免费下载。

于 2011-01-21T15:33:33.500 回答