Unter Win64 wird es mit LongInt natürlich knallen.
Selbst Integer/Cardinal ist inzwischen falsch, da dessen Größe eingefroren wurde.
Als Casts für Pointer solltest du immer nur die Typen IntPtr (falls das definiert ist),
NativeInt NativeUInt (das neue "Integer") oder besser noch LPARAM, WPARAM und LRESULT verwenden.
Letztere sind die "eigentlichen" Typen der Parameter, für z.B. SendMessage, weswegen sie
hier natürlich immer die richtigen Ergebnisse liefern.
NativeUInt/Cardinal statt NativeInt/Integer, da Pointer natürlich vorzeichenlos sind.