環境
項目 | 説明 |
---|---|
OS | Windows11 |
Windows SDK | 10.0.22000.0 |
LRESULTは64ビットint型
minwindef.hを見ると以下のようにtypedefされています.
//minwindef.h /* Types use for passing & returning polymorphic values */ typedef UINT_PTR WPARAM; typedef LONG_PTR LPARAM; typedef LONG_PTR LRESULT;
つまりLRESULT=LONG_PTRなわけですが、LONG_PTRはbasetsd.hで以下のようにtypedefされています.
//basetsd.h #if defined(_WIN64) typedef __int64 INT_PTR, *PINT_PTR; typedef unsigned __int64 UINT_PTR, *PUINT_PTR; typedef __int64 LONG_PTR, *PLONG_PTR; typedef unsigned __int64 ULONG_PTR, *PULONG_PTR; #define __int3264 __int64 #else
つまりLONG_PTR=__int64なわけですが、__int64は(Microsoft C/C++において)明示的に64ビット長であることを指定したint型です. 以上からLRESULT型は(64bit環境では)64ビットのint型であることが分かりました.
LONG_PTR型はポインタではない
LONG_PTR型はPTR(pointer)と名前がついていますがポインタ型ではなくポインター長のint型という意味らしい. Win32環境では__int32、Win64環境では__int64として定義されているらしいです.