Win32API講座3回
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
Unicode文字とマルチバイト文字についてです
前回ではあえて触れませんでしたが
次のように打ってコンパイルしてください
#include <windows.h>
#include <windowsx.h>
int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPre...
{
MessageBox(NULL,"Hello World","Msg Box",MB_OK);
return 0;
}
おそらく
error C2664: 'MessageBoxW' : 2 番目の引数を 'const char ...
というエラーが出るはずです
まず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 hPre...
{
MessageBox(NULL,_T("Hello World"),_T("Msg Box"),MB_OK);
return 0;
}
|(^ω^)やったお|5|
|何これwww意味不すぎwww|1|
|。(`ω´#)。あぁん?最近、だらしねぇな|1|
終了行:
Unicode文字とマルチバイト文字についてです
前回ではあえて触れませんでしたが
次のように打ってコンパイルしてください
#include <windows.h>
#include <windowsx.h>
int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPre...
{
MessageBox(NULL,"Hello World","Msg Box",MB_OK);
return 0;
}
おそらく
error C2664: 'MessageBoxW' : 2 番目の引数を 'const char ...
というエラーが出るはずです
まず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 hPre...
{
MessageBox(NULL,_T("Hello World"),_T("Msg Box"),MB_OK);
return 0;
}
|(^ω^)やったお|5|
|何これwww意味不すぎwww|1|
|。(`ω´#)。あぁん?最近、だらしねぇな|1|
ページ名: