win32 プロジェクトでの視覚化中に、次のようなことをすると、この問題が発生します。
char temp[80]="hello";
その後:
MessageBox(hDlg,(LPCWSTR)temp,_T("titolo"),MB_OK);
結果は日本語の文字ですが、何が問題なのですか? ありがとう。
win32 プロジェクトでの視覚化中に、次のようなことをすると、この問題が発生します。
char temp[80]="hello";
その後:
MessageBox(hDlg,(LPCWSTR)temp,_T("titolo"),MB_OK);
結果は日本語の文字ですが、何が問題なのですか? ありがとう。
問題は、 aLPCWSTR
がワイド文字配列であり、char
配列があることです。
試す:
wchar_t temp[]= L"hello";
Luchian が基本的な答えを教えてくれます。
Windows アプリケーションの開発を始めた昔にさかのぼると、Windows の Unicode バージョンがあったことさえ覚えていません。マルチバイト文字列しかありませんでした。Visual C++ ウィザードを使用して新しいアプリケーションを作成すると、基本的な文字列文字が "char" であるアプリが作成されました。ある時点で、Microsoft は Unicode が進むべき道であると予見しTCHAR
、 、LPTSTR
、および と呼ばれる型を作成しましLPCTSTR
た。これらのタイプは、プロジェクトで「UNICODE」を定義したかどうかによって、コンパイル方法が異なります。UNICODE を定義していない場合は、TCHAR
= char
、LPTSTR
= LPSTR
、およびLPCTSTR
=LPCSTR
です。ただし、UNICODE を定義した場合は、TCHAR
= WCHAR
(またはwchar_t
)、LPTSTR
=LPWSTR、およびLPCTSTR
= LPCWSTR
.
現在開発中のアプリは UNICODE アプリではなく、MBCS (マルチバイト文字列) です。将来的には、最終的に UNICODE に変更されることを願っています。私が常に試みてきたのはTCHAR
、文字列に型を使用することです。これにより、将来的には UNICODE を定義するだけで、すべての文字列機能が機能するようになります。
そうは言っても、TCHAR
UNICODE を定義したかどうかわからない場合は、関数を使用することもできます。
TCHAR temp[] = _T("hello");