a.データ型
数値型型 | 解説 |
---|---|
BOOL,BOOLEAN |
論理型変数。TRUEまたはFALSEを格納する。 |
BYTE |
8ビットの符号なし整数 |
WORD |
16ビットの符号なし整数 |
LONG |
32ビットの符号付き整数 |
DWORD |
32ビットの符号なし整数 |
LONGLONG |
64ビットの符号付き整数 |
ULONGLONG |
64ビットの符号なし整数 |
CHAR |
char と同じ |
WCHAR |
wchar_t と同じ |
SHORT |
short int と同じ |
USHORT |
unsigned short int と同じ |
INT |
signed int と同じ |
UINT |
unsigned int と同じ |
FLOAT |
float と同じ |
VOID |
void と同じ |
これらの接頭語に"LP"または"P"を指定してやると、ポインタ型になるという規則があります。
例えば、LONG型へのポインタはPLONG型として表現できます。
これはLONG *と同じですが、"LP"または"P"をつけたほうがよく用いられます。
型 | 解説 |
---|---|
TCHAR |
UNICODEが定義されていればWCHAR 、そうでなければCHAR |
TBYTE |
UNICODEが定義されていればWCHAR 、そうでなければCHAR |
PSTR,LPSTR |
NULLで終わる8ビット文字列へのポインタ |
PCSTR,LPCSTR |
NULLで終わる変更できない8ビット文字列へのポインタ |
PWSTR,LPWSTR |
NULLで終わる16ビット文字列へのポインタ |
PCWSTR,LPCWSTR |
NULLで終わる変更できない16ビット文字列へのポインタ |
PTSTR |
UNICODEが定義されていればPWSTR 、そうでなければPSTR |
PCTSTR |
UNICODEが定義されていればPCWSTR 、そうでなければPCSTR |
LPTSTR |
UNICODEが定義されていればLPWSTR 、そうでなければLPSTR |
LCPTSTR |
UNICODEが定義されていればLPCWSTR 、そうでなければLPCSTR |
ソフトウェアの国際化に対する一番の問題は文字列です。
日本は1バイトの英語(アルファベット)と2バイトの平仮名(片仮名、漢字など)が混在(そのような言葉をマルチバイト文字という)しており、統一した制御が難しいという問題点があります。
そこで、多くの文字を表現しなければならない多言語のコードを表現する手段としてワイド文字と呼ばれるwchar_t
型を定めました。
この型は1文字を16ビットで表現するため、事実上UNICODEを保存する手段として用いられています。
UNICODEとは、世界中のあらゆる文字を表現するために規格化された文字コードで、1文字を表現するために2バイトを使います。
すなわち、国際化に対応するにはUNICODEを用いるのが有効な手段となります。
上図のように実体を隠蔽するように独自の文字列型を定めてやれば、問題は解決されます。
しかし、まだ問題点があります。例えば次の文を見てください。
PCTSTR pctstr="Hello, World";
この文では、文字列リテラルは常にマルチバイト文字となります。UNICODEマクロが定義されていれば問題ありませんが、もしPCTSTR
がPCWSTR
として解釈されたのであれば、文字列リテラルの接頭語として"L"を指定しなければなりません。
この問題を解決するために、TEXT()
マクロを用います。
TEXT(LPCTSTR string);
string
には文字列リテラルを指定します。
色々と難しいことを述べましたが、結論は全ての文字列リテラルに対してTEXT()
マクロを用いればよい、ということになります。