Visual c++ MSVCRT向后兼容?

Visual c++ MSVCRT向后兼容?,visual-c++,msvcrt,crt,Visual C++,Msvcrt,Crt,假设DLL A作为CRT 8.0.50727.762作为依赖项。此DLL用于exe项目,该项目使用MFC=Use标准Windows库动态链接/MD。 DLL和使用DLL的项目都使用VS2005,但是项目构建机器有一个更新的CRT。因此exe本身在其清单中依赖于8.0.50727.6195 现在我有两个问题: 我对CRT版本向后兼容的理解正确吗 因此,当我部署项目并将CRT程序集版本8.0.50727.6195添加到exe的工作目录时,无论WinSXS缓存中有什么,它都应该在任何客户端上工作,对吗

假设DLL A作为CRT 8.0.50727.762作为依赖项。此DLL用于exe项目,该项目使用MFC=Use标准Windows库动态链接/MD。 DLL和使用DLL的项目都使用VS2005,但是项目构建机器有一个更新的CRT。因此exe本身在其清单中依赖于8.0.50727.6195

现在我有两个问题:

我对CRT版本向后兼容的理解正确吗

因此,当我部署项目并将CRT程序集版本8.0.50727.6195添加到exe的工作目录时,无论WinSXS缓存中有什么,它都应该在任何客户端上工作,对吗


否。CRT或MFC不向后兼容。您必须在客户端的机器上安装适当的VisualC++运行时,确保:

版本应与VC7、VC8等相匹配,。。VC14等。 这一点应该是一致的。如果您的应用程序是32位的,则需要32位的可再发行版本,x64也是如此。 service pack版本也必须匹配!
需要注意的是,它们都可以共存!VC10 RTM、VC10 SP2、VC10 x64 RTM。。所有这些都可以共存。

DLL不能影响EXE的清单,它有自己的清单。您的过程中有多个版本的CRT,这是相当危险的。DLL的接口必须非常干净,不交换需要调用方删除的对象,不抛出异常,不依赖全局CRT状态(如errno等)。但是DLL对旧CRT的请求不应该重定向到新CRT吗?这是一厢情愿的想法,它不能这样工作。