SendMessageサインは
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
またはこれ
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, StringBuilder lParam);
intと を交換しないでくださいIntPtr。これらは、32 ビット (サイズが等しい) でのみほぼ同等です。64 ビットでは、 anIntPtrは a とほぼ同等ですlong(サイズが等しい)。
GetWindowThreadProcessIdサインは
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
また
static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);
この場合、arefまたは a outto "something" は何かへのマネージド リファレンスであるため、IntPtrNative API に渡されるときに内部的に に変換されます。ネイティブout uintAPI の観点からは、IntPtr.
説明: 重要なのは、パラメーターの「長さ」が正しいことです。intとuintは、呼び出された API で同じです。そして32ビットIntPtrも同じです。
bool一部の型 (や などchar) は、マーシャラーによって特別に処理されることに注意してください。
を に変換しないでintくださいIntPtr。それをそのままにして、IntPtr幸せに生きてください。でサポートされていない数学演算を行う必要がある場合はIntPtr、 を使用しますlong(これは 64 ビットなので、Windows 128がリリースされるまでは問題ありません :-) )。
IntPtr p = ...
long l = (long)p;
p = (IntPtr)l;