アプリケーションには次の C# コードがあります。
private IntPtr _DefaultWndProc = IntPtr.Zero;
[DllImport("user32")]
private static extern IntPtr SetWindowLongPtr(IntPtr hwnd, int index,
WndProcPointer wndProcPointer);
[DllImport("user32")]
private static extern IntPtr SetWindowLongPtr(IntPtr hwnd, int index,
IntPtr wndProc);
[DllImport("user32")]
private static extern IntPtr GetWindowLongPtr(IntPtr hwnd, int index);
[DllImport("User32.dll", CharSet = CharSet.Auto)]
private static extern int CallWindowProc(IntPtr wndProc, IntPtr hwnd, int msg,
IntPtr wparam, IntPtr lparam);
private const int GWL_WNDPROC = (-4);
private const int WM_NCDESTROY = 0x0082;
private delegate int WndProcPointer(IntPtr hwnd, nt msg,
IntPtr wparam, IntPtr lparam);
protected virtual int WndProc(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam)
{
return CallWindowProc(_DefaultWndProc, hwnd, msg, wparam, lparam);
}
_DefaultWndProc
次のように設定されています。
_DefaultWndProc = SetWindowLongPtr(control.Handle, GWL_WNDPROC, _MyWndProc);
このプログラムを 32 ビット構成用にコンパイルして実行すると、すべて正常に動作します。
ただし、構成を 64 ビットに設定すると、CallWindowProc(_DefaultWndProc, hwnd, msg, wparam, lparam)
上記のメソッド呼び出しで次の例外がスローされます。
System.OverflowException - {"Arithmetic operation resulted in an overflow."}
これは、マウス カーソルを の特定の列に移動した場合にのみ発生しますListView
。
何か案が ?