参考:http://jingyan.baidu.com/article/6525d4b1090139ac7d2e9413.html
vs2005默认设置是Unicode字符集,vc6.0默认multi-byte多字符集。当我们试图用vc6.0上正确的程序在vs2005上运行时,第一个碰到的问题就会是它。
MessageBox( hwnd, "ok", "message", 0 );
这样一个简单的函数在vc上没有问题,但是vs2005中看看MessageBox的定义就会发现:
int WINAPI MessageBoxA(
__in_opt HWND hWnd,
__in_opt LPCSTR lpText,
__in_opt LPCSTR lpCaption,
__in UINT uType);
int WINAPI MessageBoxW(
__in_opt HWND hWnd,
__in_opt LPCWSTR lpText,
__in_opt LPCWSTR lpCaption,
__in UINT uType);
#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif // !UNICODE
原来不同的字符集下,调用的MessageBox函数是不一样的,这才造成了编译错误。
所以,正确的写法就是将所有的字符前加_T("..."),这个宏会将字符变为宽字符。
或者在“项目-xx属性-配置属性-常规”中改变字符集选项(推荐)。
注意!记得添加#include <tchar.h>头文件,否则_T是未定义错误。