当使用 C++ 托管扩展时,如果尝试在 MFC 应用程序内创建托管类型的实例,则编译器还将生成 C3828。为了跟踪内存的使用情况,在 MFC 调试版本中使用时 MFC 重定义 new 运算符。由于此重定义的缘故,会在 MFC 应用程序中创建托管类的实例,从而导致错误。在将现有 MFC 代码移植到公共语言运行库时通常会发生这种情况。对于发布版本不会发生此错误,这是因为 MFC 不重定义 new 运算符。
若要避免此错误,请在创建托管类型的实例前,使用 #undef 和 push_macro 指令暂时取消定义 new 运算符。在最后一行托管代码的后面,使用 pop_macro 还原先前的 new 运算符定义。
#pragma push_macro("new")
#undef new
String* s;
s = new String("Hello world!");
#pragma pop_macro("new")
详细信息清参考MSDN文档:http://msdn2.microsoft.com/zh-cn/library/b3z6z0ay(VS.80).aspx
希望能够对您有所帮助。
Jasson Wang
在线技术支持工程师
微软全球技术支持中心
有关 #pragma push_macro("new") 的用法
最新推荐文章于 2023-01-09 14:27:26 发布