我怀疑可能是由于两台运行 Windows 7 的计算机上加载的 CRT 版本不同而导致的错误。如何确定正在加载 Winsxs 文件夹中的 MSVCR90.dll 的哪个版本?
我的程序是一个被另一个 EXE 加载的 DLL。它是使用 Visual Studio 2008 SP1 编译的。
最佳答案
正如 Al Kepp 回答的那样,您可以使用 Dependency Walker“Depends.exe”。对于动态加载的 DLL,最好的方法是在应用程序加载您的库时对其进行分析。
在 Dependency Walker 中打开 EXE,而不是您的 DLL。然后单击“配置文件-->开始配置文件”。如果应用程序需要参数,您可以在打开的窗口中提供它们,否则只需单击“确定”即可启动程序。程序打开后,以正常方式使用它,以便它加载您的 DLL。现在您的 DLL 已加载,您应该能够浏览 Dependency Walker 中的树以查看正在使用哪些版本的 CRT。
如果您看不到版本,请确保通过单击“C:\”按钮在树中显示完整路径。
您还可以通过检查 list 来了解应用程序或库正在请求哪个版本的 CRT, list 通常但并不总是包含在 DLL 或 EXE 中。在 Visual Studio 中,单击“文件->打开->文件...”并选择 EXE 或 DLL。打开 RT_MANIFEST 资源,您应该会看到一些 XML,其中列出了 CRT 作为依赖项和版本。
关于visual-studio - 正在加载哪个版本的 C 运行时库 (CRT)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4760491/