public static IntPtr SetClassLong(HandleRef hWnd, int nIndex, IntPtr dwNewLong)
{
if (IntPtr.Size > 4)
return SetClassLongPtr64(hWnd, nIndex, dwNewLong);
else
return new IntPtr(SetClassLongPtr32(hWnd, nIndex, unchecked((uint)dwNewLong.ToInt32())));
}
[DllImport("user32.dll", EntryPoint="SetClassLong")]
public static extern uint SetClassLongPtr32(HandleRef hWnd, int nIndex, uint dwNewLong);
[DllImport("user32.dll", EntryPoint="SetClassLongPtr")]
public static extern IntPtr SetClassLongPtr64(HandleRef hWnd, int nIndex, IntPtr dwNewLong);
None.
SetClassLongPtr is 64-bit safe, SetClassLong is not.
Because SetClassLongPtr is not available on older 32-bit operating systems, a special wrapper function is required. The MSDN documentation specifies that SetClassLongPtr is supported on older 32-bit operating systems such as Windows 95. However, the Win32 API actually uses a macro to change SetClassLongPtr to SetClassLong on these older systems.
Testing the size of the IntPtr is the easiest way to determine if the platform is 64-bit.
Please add some!
Please add some!
Do you know one? Please contribute it!