请教VS2010关于字符转换的一个问题
我编写的程序是:59 case WM_CHAR:
60 char szChar[20];
61 sprintf_s(szChar,"char is %d",wParam);
62 MessageBox(hwnd,szChar,"char_test",0);
63 break;
调试后出现错误:
1>f:\vc++\vclesson\lesson1\winmain\winmain\winmain.cpp(62): error C2664: “MessageBoxW”: 不能将参数 2 从“char [20]”转换为“LPCWSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
在网上查了下,原来VS2010默认是Unicode字符集,MessageBox实际是MessageBoxW,字符需要用_T()转换为Long,我做了如下尝试:
(1)61行改为:sprintf_s(szChar,_T("char is %d"),wParam); 提示错误:
1>f:\vc++\vclesson\lesson1\winmain\winmain\winmain.cpp(61): error C2665: “sprintf_s”: 2 个重载中没有一个可以转换所有参数类型
1> d:\program files\microsoft visual studio 10.0\vc\include\stdio.h(323): 可能是“int sprintf_s<20>(char (&)[20],const char *,...) throw()”
1> d:\program files\microsoft visual studio 10.0\vc\include\stdio.h(321): 或 “int sprintf_s(char *,size_t,const char *,...)”
1> 尝试匹配参数列表“(char [20], const wchar_t [11], WPARAM)”时
(2)62行改为:MessageBox(hwnd,_T(szChar),"char_test",0); 提示错误:
1>f:\vc++\vclesson\lesson1\winmain\winmain\winmain.cpp(62): error C2065: “LszChar”: 未声明的标识符
请问如果想把一个参数用_T()转换类型,应该如何编写程序?
另外,我在网上看到有人说使用_T()解决这个办法比更改VS2010字符集为多字节字符集要好,这是为什么?
[ 本帖最后由 hsnowirp 于 2011-3-19 13:24 编辑 ]