2

我希望你能帮我解决这个问题。

我想使用 CRT (/MD) 的 4053 版本而不是 Visual Studion 2005 SP1 中的最新版本 (5592) 构建一个 dll(静态链接其他非第三方库)。

我想知道使用以下方法是否足以完成此任务。通过在解决方案的所有依赖项目中使用此方法,据我了解,dll 的嵌入式清单已更改为声明请求的 CRT(和 MFC、ATL)版本。这个假设正确吗?

只是确保 dll 的嵌入式清单声明了所需的版本就足够了吗?在构建我的dll(忽略特定库)时,我不应该也使用属于旧(4053)CRT dll(msvcr80.dll)的正确导入库(msvcrt.lib)吗?这个导入库(msvcrt.lib)是如何随着像这样的小版本变化而变化的?

提前致谢!

马克·莫森

4

1 回答 1

1

CRT 版本号在 vc/include/crtassem.h 中声明。对于 MFC,它是 vc/atlmfc/include/mfcassem.h。对于 ATL,它是 vc/atlmfc/include/atlassem.h。如果您在开发机器上安装了安全更新,那么这些文件将被更新。在 #include任何CRT 标头之前使用 #define _CRT_ASSEMBLY_VERSION xyzw (etcetera)将覆盖该版本号。卸载安全更新也是如此。

否则这是不明智的,如果目标计算机安装了安全更新,它仍将使用 DLL 的 .5592 修订版。它部署了一个重定向版本号的“发布者策略”,确保旧程序自动得到修补。测试在客户机器上运行的版本当然总是最好的。客户很少会喜欢运送存在已知安全问题的安装程序。

于 2011-04-26T13:08:37.717 回答