In dem Fall einfach "Cardinal" durch "NativeInt" ausgetauscht und schon wuppt das.
Da Zeiger in der Regel nicht negativ werden, wäre ein
NativeUInt
wohl eher angebracht. Sonst kann es im 32-Bit-Bereich zwischen 2 und 4 GB schon mal zu merkwürdigen Effekten kommen.