0

在win32项目的可视化过程中我遇到了这个问题,如果我这样做:

char temp[80]="hello";

进而:

MessageBox(hDlg,(LPCWSTR)temp,_T("titolo"),MB_OK);

结果是日文,有什么问题?谢谢。

4

2 回答 2

3

问题是 aLPCWSTR是一个宽字符数组,而你有一个char数组。

尝试:

wchar_t temp[]= L"hello";
于 2012-05-14T13:31:31.720 回答
1

Luchian给你基本的答案。

回到过去,当我开始开发 Windows 应用程序时,我什至不记得有 Unicode 版本的 Windows。只有多字节字符串。当您使用 Visual C++ 向导创建新应用程序时,它会创建一个应用程序,其中基本字符串字符是“char”。在那里的某个时候,微软预见到 Unicode 是要走的路,他们创建了名为TCHAR,LPTSTRLPCTSTR. 这些类型的编译方式不同,具体取决于您是否在项目中定义了“UNICODE”。如果您没有定义 UNICODE,则TCHAR= charLPTSTR=LPSTRLPCTSTR= LPCSTR。但是,如果您定义了 UNICODE,则TCHAR= WCHAR(或wchar_t)、LPTSTR=LPWSTR 和LPCTSTR= LPCWSTR

我仍在开发的当前应用程序不是 UNICODE 应用程序,而是 MBCS(多字节字符串)。在未来的某个时候,我希望它最终会更改为 UNICODE。我一直试图做的是使用TCHAR我的字符串的类型,以便将来我所要做的就是定义 UNICODE 并且我的所有字符串功能都可以工作。

话虽如此,TCHAR如果您不知道是否定义了 UNICODE,也可以使用这些函数:

TCHAR temp[] = _T("hello");

于 2012-05-14T14:31:06.793 回答