在win32项目中进行可视化时我遇到了这个问题,如果我这样做的话:
char temp[80]="hello";
然后:
MessageBox(hDlg,(LPCWSTR)temp,_T("titolo"),MB_OK);
结果是日文字符,问题是什么? 感谢。
答案 0 :(得分:3)
问题是LPCWSTR
是一个宽字符数组,并且你有一个char
数组。
尝试:
wchar_t temp[]= L"hello";
答案 1 :(得分:1)
Luchian为您提供了基本答案。
在我开始开发Windows应用程序的过去,我甚至不记得有一个Unicode版本的Windows。只有多字节字符串。当您使用Visual C ++向导创建新应用程序时,它创建了一个应用程序,其中基本字符串字符是“char”。在那里的某个时候,微软预见到Unicode是可行的方式,他们创建了名为TCHAR
,LPTSTR
和LPCTSTR
的类型。这些类型的编译方式不同,具体取决于您是否在项目中定义了“UNICODE”。如果您未定义UNICODE,则TCHAR
= char
,LPTSTR
= LPSTR
和LPCTSTR
= LPCSTR
。但是,如果您定义了UNICODE,则TCHAR
= WCHAR
(或wchar_t
),LPTSTR
= LPWSTR和LPCTSTR
= LPCWSTR
。< / p>
我正在开发的当前应用程序不是UNICODE应用程序,而是MBCS(多字节字符串)。在将来的某个时候,我希望它最终会改为UNICODE。我一直试图做的是使用TCHAR
类型作为我的字符串,以便将来我所要做的就是定义UNICODE并且我的所有字符串功能都能正常工作。
话虽如此,如果您不知道是否已定义UNICODE,也可以使用TCHAR
函数:
TCHAR temp[] = _T("hello");