ぷるぷるの雑記

低レイヤーがんばるぞいなブログ. 記事のご利用は自己責任で.

LRESULT型とは何なのか

環境

項目 説明
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として定義されているらしいです.

参考

learn.microsoft.com

www.wdic.org