|
typedef void *PVOID;しかし、HANDLE型と同様に現在のコンパイラーでは工夫が凝らされていて未使用の数値を内容に持つ構造体へのポインターであり、Windowsにおいては他のハンドルもまた同様の扱いとなっている。
typedef PVOID HANDLE;
typedef HANDLE HWND;
DECLARE_HANDLE (HWND)DECLARE_HANDLEはマクロであり、winnt.hで、次のように定義されている。
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *namenameにHWNDを代入し、このマクロを展開すると、次のようになる。
#define struct HWND__ { int unused; }; typedef struct HWND__ *HWNDつまり、int型の変数unused(未使用の意)を持った構造体へのポインター変数を定義する構造となっている。こうすることで、型の異なるハンドル同士の代入を防止している。