Unicode文字とマルチバイト文字についてです 前回ではあえて触れませんでしたが 次のように打ってコンパイルしてください #include <windows.h> #include <windowsx.h> int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { MessageBox(NULL,"Hello World","Msg Box",MB_OK); return 0; } おそらく error C2664: 'MessageBoxW' : 2 番目の引数を 'const char [12]' から 'LPCWSTR' に変換できません。 というエラーが出るはずです まずLPCWSTRって何よ?って話からです LPC はポインタ(long const pointer)を意味しています STR は文字列の意味です 「W」 がポイントでこれがUnicode文字を示しています 1文字を格納するのにいままで使っていたchar型は1バイトでした つまり1文字1バイトです それに対し、Unicode文字は 1文字を2バイトとして扱います それにはwchar_t型という型を使います つまり、「W」はwchar_tのwです LPCWSTRを正式な書き方(?)で書くと const wchar_t* となります で、さっきのエラーをもう一度みてみると MessageBox関数を呼んだはずなのに MessageBoxWと書いてあります 実はWin32APIは文字コードの設定で #ifdef UNICODE #define MessageBox MessageBoxW #else #define MessageBox MessageBoxA #endif // !UNICODE のように内部で MessageBoxA // マルチバイト文字用 MessageBoxW // Unicode文字用 と使う関数を切り分けているのです 他の文字列を使う関数に関しても同じような切り替えがされています 文字コードの設定は プロジェクト→プロジェクトのプロパティから &ref(Unicode.GIF); を、次のように変更すると1文字をchar型として従来通り使えますが・・・ &ref(Multibyte.GIF); 個人的には、tchar.hをインクルードして 対応文字列関数を書くほうがよいと思います C/C++マニアック雑記5 というのは、マルチバイト文字だと対応してない関数なども存在するからです (大抵の場合は上記のように切り替えされてますが・・・) なお文字列を_T("")で書けば、マルチバイト、Unicodeを意識しなくて済みます #include <tchar.h>// マルチバイト文字とUnicode文字、相互互換文字列関数のヘッダー #include <windows.h> #include <windowsx.h> int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { MessageBox(NULL,_T("Hello World"),_T("Msg Box"),MB_OK); return 0; } #vote((^ω^)やったお[5],何これwww意味不すぎwww[1],。(`ω´#)。あぁん?最近、だらしねぇな[1]) |(^ω^)やったお|5| |何これwww意味不すぎwww|1| |。(`ω´#)。あぁん?最近、だらしねぇな|1|