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 out
to "something" は何かへのマネージド リファレンスであるため、IntPtr
Native API に渡されるときに内部的に に変換されます。ネイティブout uint
API の観点からは、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;