Zitat:
... IntPtr ... Cardinals ...
Oder gar Integer (31 Bit) mit Prüfungen auf < 0, drum ist IMAGE_FILE_LARGE_ADDRESS_ AWARE nicht standardmäßig aktiv.
UIntPtr
IntPtr
Native
UInt
NativeInt
und allgemein überall die richtigen Typen, wie z.B. LPARAM, WPARAM und LRESULT für SendMessage/PostMessage, anstatt Integer/Cardinal usw.
oder andersrum z.B. HRESULT statt Integer/Cardinal/Sonstwar für das aus GetLastError und Co.
Hier sieht es eher so aus, als wenn signed 32 Bit-
Integer-Zeiger (nicht unsigned Cardinal) an einen 64 Bit-Integer übergeben/gecastet wird.
$9xxxxxxx hat das höchste Bit gesetzt, drum wird/bleibt das negaitv, also es werden auch alle 32 höheren Bits negativ.
In Bezug auf einen Integer->Int64 ist es vollkommen korrekt, dass es ab $800000000 zu $FFFFFFFF800000000 wird.