Ich dreh bald noch durch ... wie um Himmels Willen macht Delphi das nur?
Also wie entscheidet Delphi wann es wie ausrichtet?
Hier mal ein kleiner Test:
TY und TZ sind gleich groß, aber dennnoch ist es anders.
Delphi-Quellcode:
Type
{$ALIGN 1}
TYb1 = Record x: byte; y: integer; End;
{$ALIGN 4}
TYb = Record x: byte; y: integer; End;
TZb = Record x: array[0..7] of Byte; End;
TX = Record
a: Byte;
b: Int64;
End;
TY1 = Record
a: Byte;
b: TYb1;
End;
TY = Record
a: Byte;
b: TYb;
End;
TZ = Record
a: Byte;
b: TZb;
End;
Var X: TX;
Y: TY;
Y1: TY1;
Z: TZ;
i, j, k,l: Integer;
Begin
i := Integer(@X.b) - Integer(@X.a);
j := Integer(@Y.b) - Integer(@Y.a);
l := Integer(@Y1.b) - Integer(@Y1.a);
k := Integer(@Z.b) - Integer(@Z.a);
ShowMessage(Format('X.a-Xb: %d X: %d'#10
+ 'Y.a-Yb: %d Y: %d TY: %d'#10
+ 'Z.a-Zb: %d Z: %d TZ: %d'#10
+ 'Y1.a-Y1b: %d Y1: %d TY1: %d'#10,
[i, SizeOf(TX),
j, SizeOf(TY), SizeOf(TYb),
k, SizeOf(TZ), SizeOf(TZb),
l, SizeOf(TY1), SizeOf(TYb1)]));
Code:
---------------------------
Test
---------------------------
X.a-Xb: 4 X: 12
Y.a-Yb: 4 Y: 12 TY: 8
Z.a-Zb: 1 Z: 9 TZ: 8
Y1.a-Y1b: 1 Y1: 6 TY1: 5
---------------------------
OK
---------------------------
Im Packed-Modus läuft meine Record-Serialisierung, aber mit der automatischen Ausrichtung will es einfach nicht klappen.