eventuell liegt das an deinem (Item - 1) * 4
? Dieser Parameter ist ja nur ein Index kann also fortlaufend sein (z.B.: 0,1,2,...) wenn dann dadurch die Größe deines ExtraByte-Feldes (z.B.: SizeOf(LONG_PTR)*x) überschritten wird könnte es zu diesem Effekt kommen.
Nun dann müsste es auch unter 32Bit krachen oder nicht?
Das tut es aber seit mehr als 6 Jahren nicht
es werden immer die korrekten Pointer zurück geliefert.
bsp.
Item := FORM_TopRight = 4
bei
SetWindowLongPtr(WinHandle, (Item - 1) * 4, V);
ist das Item = 12
Wenn ich die property zurück lese
dann ist item
ImgTR := Pointer(GetProperty(pHandle, FORM_TopRight));
FORM_TopRight := 4 = (Item - 1) * 4 = 12
Es ist also in jedem fall der gleiche Index.
Aber die werte die abgespeichert wurden stimmen nicht unter 64Bit.
GetProperty liest die werte so zurück wie si von SetProperty übergeben wurden.
gruss