私はここで怠けていることを知っており、ヘッダーファイルを自分でトロールする必要がありますが、LPARAMおよびWPARAMパラメータの実際のタイプは何ですか?それらはポインターですか、それとも4バイト整数ですか?私はいくつかのC#相互運用コードを実行していますが、x64システムで動作することを確認したいと思います。
LPARAM
はLONG_PTR
のtypedefです。これは、win32ではlong
(32ビットの符号付き)、x86_64では__int64
(64ビットの符号付き)です。
WPARAM
はUINT_PTR
のtypedefで、win32ではunsigned int
(符号なし32ビット)、x86_64ではunsigned __int64
(符号なし64ビット)です。
これらのtypedefは16ビット時代に遡ります。もともと、LPARAM
はlong
(符号付き32ビット)であり、WPARAM
はWord
(符号なし16ビット)であったため、 WおよびL 。キャストされたポインターをメッセージパラメーターとして渡す一般的な慣習により、WPARAM
はWin32では32ビットに拡張され、LPARAM
とWPARAM
はWin64では64ビットに拡張されました。
C#では、IntPtr
にはLPARAM
を、WPARAMにはUIntPtr
を使用する必要があります。
LP
プレフィックスにもかかわらず、LPARAM
はARAM
への遠いポインタではないことに注意してください。
LPARAMはLONG_PTRを指し、WPARAMはUINT_PTRを指します
X86では4バイト、x64では8バイトになります。
友達に必要なのは http://www.pinvoke.net/
typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;