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マクロが定義されていれば問題ありませんが、もしPCTSTRPCWSTRとして解釈されたのであれば、文字列リテラルの接頭語として"L"を指定しなければなりません。
この問題を解決するために、TEXT()マクロを用います。

TEXT(LPCTSTR string);

stringには文字列リテラルを指定します。
色々と難しいことを述べましたが、結論は全ての文字列リテラルに対してTEXT()マクロを用いればよい、ということになります。