简介
本文描述的修复程序在 Microsoft Visual Studio 2010 中修复了以下问题。
问题 1
当您运行的应用程序的源代码中有循环时遇到意外的情况。如果使用全局优化编译的源代码,就会发生此问题 (/ Og) 启用。
问题 2
请考虑以下情形:
-
您必须将包含的 Atlcomcli.h 文件的 Visual C++ 项目。
-
指定 /J 编译器选项来定义_CHAR_UNSIGNED项目中的宏。
-
编译该项目。
在这种情况下,您会收到以下错误消息之一︰
-
错误 C2338︰ 无法启用 /J 或 _CHAR_UNSIGNED 标记编译 CVarTypeInfo < 字符 >
-
错误 C2338: CVarTypeInfo < char * > 不能编译启用 /J 或 _CHAR_UNSIGNED 标记
问题 3
构建的基于 x86 的 Windows 版本的 Visual C++ 应用程序运行时,将发生访问冲突。应用程序必须具有两个数组类型的输入的参数的表达式树,则会发生此问题。
原因
问题 1 的原因
发生此问题是由于不正确的循环优化执行。这会导致不正确的代码生成。
问题 2 的原因
因为 Atlcomcli.h 文件中的静态断言设为 /J 选项和 CHAR_UNSIGNED 宏不正确,将出现此问题。
问题 3 的原因
发生此问题是因为推指令中的参数都乱套了。因此,不正确的参数传递来推送指令。
详细信息
修补程序信息
受支持的修补程序现已从 Microsoft 推出。但是,它被用于纠正本文中描述的问题。它仅应用于正经历此特定问题的系统。此修补程序可能会接受进一步的测试。因此,如果这个问题没有对您造成严重的影响,我们建议您等待包含此修复程序下一步的 Visual Studio 2010。
要立即解决此问题,请联系 Microsoft 客户支持服务,以获取此修复程序。有关 Microsoft 客户支持服务的电话号码和有关支持费用的信息的完整列表,请访问下面的 Microsoft 网站︰
http://support.microsoft.com/contactus/?ws=support注意: 在特殊情况下,如果 Microsoft 支持专业人员确定某个特定的更新能够解决您的问题,可能取消的通常情况下收取的电话支持服务费用。照常收取支持费用将应用于其他支持问题和对于特定更新无法解决的问题。
系统必备组件
您必须具有要应用此修补程序的安装 Microsoft Visual Studio 2010。
重启要求
不需要任何受影响的文件正被不使用如果应用此修复程序后,重新启动计算机。
修补程序替换信息
此修补程序不替换任何其他修补程序。
文件信息
此修复程序的英文版具有的文件属性 (或更新的文件属性)在下表中列出。日期和为这些文件的时间以协调世界时 (UTC) 列出。当您查看文件信息时,它将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用
时区
选项卡中
日期和时间
在控制面板中的项。
文件名称 |
文件版本 |
文件大小 |
日期 |
时间 |
平台 |
---|---|---|---|---|---|
C2.dll |
16.0.30319.314 |
2,510,144 |
30-May-2010 |
20:48 |
x86 |
C2.dll |
16.0.30319.314 |
2,588,480 |
30-May-2010 |
20:48 |
x86 |
C2.dll |
16.0.30319.314 |
2,630,976 |
30-May-2010 |
20:48 |
x86 |
C2.dll |
16.0.30319.314 |
2,977,600 |
30-May-2010 |
20:48 |
x64 |
C2.dll |
16.0.30319.314 |
7,351,616 |
30-May-2010 |
20:48 |
IA-64 |
解决方法
问题 1 的解决方法
若要变通解决此问题,请禁用全局优化。有关如何禁用全局优化的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章︰
216181解决︰ 不正确使用 /Og 优化生成的代码
问题 2 的解决方法
若要变通解决此问题,请使用下面的杂注指令包含 Atlcomcli.h 文件。
#pragma push_macro("ATLSTATIC_ASSERT")
#undef ATLSTATIC_ASSERT
#define ATLSTATIC_ASSERT(x,y)
#include <atlcomcli.h>
#undef ATLSTATIC_ASSERT
#pragma pop_macro("ATLSTATIC_ASSERT")