2012-05-14 37 views
0

在Win32中的項目,我有這個問題,如果我做這樣的事情可視化期間:C++字符可視化的Win32項目

char temp[80]="hello"; 

然後:

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

結果是日文字符,有什麼問題? 謝謝。

+9

-1你爲什麼在這裏浪費別人的時間的原因是你有一個C風格的演員,告訴編譯器閉嘴,因爲你知道你在做什麼。即你對編譯器說謊,所以它不會告訴你這個問題。然後你問這裏的人用他們的時間來告訴你編譯器會告訴你什麼。 –

+1

+1給Alf。切勿騙電腦。 –

回答

1

Luchian爲您提供了基本的答案。

回到過去,當我開始開發Windows應用程序時,我甚至不記得有一個Unicode版本的windows。只有多字節字符串。當您使用Visual C++嚮導創建新應用程序時,它創建了一個應用程序,其中基本字符串字符爲「char」。有時候,微軟預計Unicode將會走向成功,他們創造了一種叫做TCHAR,LPTSTRLPCTSTR的類型。這些類型的編譯方式取決於您在項目中是否定義了「UNICODE」。如果您未定義UNICODE,則TCHAR = char,LPTSTR = LPSTRLPCTSTR = LPCSTR。但是,如果您定義了UNICODE,那麼TCHAR = WCHAR(或wchar_t),LPTSTR = LPWSTR和LPCTSTR = LPCWSTR

我仍在開發的當前應用程序不是UNICODE應用程序,而是MBCS(多字節字符串)。在未來的某個時候,我希望它最終會改爲UNICODE。我一直試圖做的是爲我的字符串使用TCHAR類型,以便將來我只需要定義UNICODE,並且我所有的字符串功能都可以工作。

話雖這麼說,你也可以使用TCHAR功能,如果你不知道你是否已經定義了UNICODE或不做:

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

3

問題是LPCWSTR是一個寬字符數組,你有一個char數組。

嘗試:

wchar_t temp[]= L"hello"; 
+1

我唯一挑剔的是它應該是: 'wchar_t temp [] = L「hello」;' _T()宏是當你想讓它爲MBCS和UNICODE編譯時 - 或者你不知道它是UNICODE還是MBCS。如果你知道它是寬字符,你應該在字符串前加上「L」來指定它是一個寬字符串 - 至少在VC++中。 –

+0

@JoeWillcoxson是的,你是對的。我最初想寫'TCHAR'而不是'wchar_t'。 +1給你,先生。 –