真正VC++.net笔记5--MessageBox变MessageBoxA?
2005-11-12 17:31
459 查看
以前遇到这个问题一直没注意,注销掉完事。直到今天。。。
我付出了一个下午工程进度泡汤的代价,所以打算写出来,虽然这样将进一步使工程进度泡汤,不过想到也许挽救更多可能被泡汤的下午,也值:)
问题说起来也很简单:在托管C++的代码中使用MessageBox结果通不过编译,我的代码是这样的:MessageBox::Show("Oh,My God!");
编译错误为: error C2653: “MessageBoxA” : 不是类或命名空间名称
我靠!这不是强奸我的代码吗?我声明的明明是MessageBox,被强行替换成了MessageBoxA,还说是我的错:(
当然我声明了System::Windows::Forms 命名空间,更奇怪的是我在同一工程的.h下声明
MessageBox::Show("Oh,My God!");
结果顺利通过。。。彻底无语!
上网一阵狂搜(这就是我一个下午泡汤的原因),只了解了一点:也许是C宏引起的问题。另外还附带听取了一大堆关于C宏的是是非非的意见,对解决问题一点帮助都没有。
几乎绝望中,决定再试一次MSDN这根救命稻草,用MessageBoxA一搜:
。。。
//==========================================================================================
为什么即使我有命名空间,还是得到“MessageBoxA 不是‘System::Windows::Forms’成员”的错误信息?
这说明预处理器只执行文本替换,忽视了 MessageBox 是 System::Windows::Forms 命名空间的一部分这一情况。.NET Framework 不包括名为 MessageBoxA 的类,所以编译器生成错误。为解决此问题,可以使用 #undef 防止名称冲突,如下所示。
#include < windows.h >
#using < mscorlib.dll >
#using < System.Windows.Forms.dll >
#ifdef MessageBox
#undef MessageBox
#endif
int main()
{
System::Windows::Forms::MessageBox::Show("Hello, World!");
}
//==========================================================================================
MS清清楚楚的答案,我望着窗外渐黑的天空,欲哭无泪。。。
实际使用中,只要在主函数开始前声明#undef MessageBox即可。
:)
[WQL]
我付出了一个下午工程进度泡汤的代价,所以打算写出来,虽然这样将进一步使工程进度泡汤,不过想到也许挽救更多可能被泡汤的下午,也值:)
问题说起来也很简单:在托管C++的代码中使用MessageBox结果通不过编译,我的代码是这样的:MessageBox::Show("Oh,My God!");
编译错误为: error C2653: “MessageBoxA” : 不是类或命名空间名称
我靠!这不是强奸我的代码吗?我声明的明明是MessageBox,被强行替换成了MessageBoxA,还说是我的错:(
当然我声明了System::Windows::Forms 命名空间,更奇怪的是我在同一工程的.h下声明
MessageBox::Show("Oh,My God!");
结果顺利通过。。。彻底无语!
上网一阵狂搜(这就是我一个下午泡汤的原因),只了解了一点:也许是C宏引起的问题。另外还附带听取了一大堆关于C宏的是是非非的意见,对解决问题一点帮助都没有。
几乎绝望中,决定再试一次MSDN这根救命稻草,用MessageBoxA一搜:
。。。
//==========================================================================================
为什么即使我有命名空间,还是得到“MessageBoxA 不是‘System::Windows::Forms’成员”的错误信息?
这说明预处理器只执行文本替换,忽视了 MessageBox 是 System::Windows::Forms 命名空间的一部分这一情况。.NET Framework 不包括名为 MessageBoxA 的类,所以编译器生成错误。为解决此问题,可以使用 #undef 防止名称冲突,如下所示。
#include < windows.h >
#using < mscorlib.dll >
#using < System.Windows.Forms.dll >
#ifdef MessageBox
#undef MessageBox
#endif
int main()
{
System::Windows::Forms::MessageBox::Show("Hello, World!");
}
//==========================================================================================
MS清清楚楚的答案,我望着窗外渐黑的天空,欲哭无泪。。。
实际使用中,只要在主函数开始前声明#undef MessageBox即可。
:)
[WQL]
相关文章推荐
- 真正VC++.net笔记2--dataGrid单元格值的获取
- 真正VC++.net笔记1-系统时间的获取
- 真正VC++.net笔记3--托管C++下调用API函数
- 关于在VB.NET中调用使用VC++编写的类库dll的一点笔记
- vc.net学习笔记1
- 看了孙鑫老师的vc视频,今天又在大侠的blog里,即http://blog.csdn.net/hbyufan/ 中发现有相关笔记,转贴学习
- ASP.NET 3.5核心编程学习笔记(12):SqlCommand、SqlDataReader、事务
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(一)
- asp.net mvc 3.0详细笔记__16__自定义的 HtmlHelper类方法
- asp.net mvc 3.0详细笔记__17__使用 DataAnnotations 进行模型验证
- NetApp DataONTAP 集群模式 学习笔记1
- H.264视频编码在VC++.Net中的实现
- asp.net中引用同一个项目中的类库 避免goToDefinition时不能到达真正的定义类
- Asp.net Ajax 学习笔记5 UpdatePanel的使用(下)
- ASP.NET MVC学习笔记-----Filter
- BlogEngine.net 学习笔记一:没有做不到,只有想不到
- VC 编译错误笔记
- 笔记:Asp.Net应用程序性能优化
- ASP.NET 3.5核心编程学习笔记(23):Linq-to-SQL 数据的更新、事务、存储过程、函数
- VC++.NET实现应用程序XP风格