web-dev-qa-db-ja.com

LPARAMとWPARAMの定義は何ですか?

私はここで怠けていることを知っており、ヘッダーファイルを自分でトロールする必要がありますが、LPARAMおよびWPARAMパラメータの実際のタイプは何ですか?それらはポインターですか、それとも4バイト整数ですか?私はいくつかのC#相互運用コードを実行していますが、x64システムで動作することを確認したいと思います。

57
Mark Heath

LPARAMLONG_PTRのtypedefです。これは、win32ではlong(32ビットの符号付き)、x86_64では__int64(64ビットの符号付き)です。

WPARAMUINT_PTRのtypedefで、win32ではunsigned int(符号なし32ビット)、x86_64ではunsigned __int64(符号なし64ビット)です。

MSDNリンク

82
CB Bailey

これらのtypedefは16ビット時代に遡ります。もともと、LPARAMlong(符号付き32ビット)であり、WPARAMWord(符号なし16ビット)であったため、 WおよびL 。キャストされたポインターをメッセージパラメーターとして渡す一般的な慣習により、WPARAMはWin32では32ビットに拡張され、LPARAMWPARAMはWin64では64ビットに拡張されました。

C#では、IntPtrにはLPARAMを、WPARAMにはUIntPtrを使用する必要があります。

LPプレフィックスにもかかわらず、LPARAMARAMへの遠いポインタではないことに注意してください。

55
dan04

LPARAMはLONG​​_PTRを指し、WPARAMはUINT_PTRを指します

X86では4バイト、x64では8バイトになります。

5
Brian R. Bondy

友達に必要なのは http://www.pinvoke.net/

4
SerialSeb

ここ:

typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
4
jpalecek