Zitat von
ma2xx:
Wenn ich folgenden Code teste ...
Delphi-Quellcode:
TTest = record
case Typ:Boolean of
{$A-}
false: (T1 :Integer);
true: (T2 :Double);
{$A+}
end;
... dann erhalte ich tatsächlich gleiche Adressen für T1 und T2:
Weil es das gleiche ist, als wenn du die Struktur als 'packed' deklariert hättest.
Test-Code:
Delphi-Quellcode:
type
TTest = record
case Typ: Boolean of
{$A-}
False: (T1: Integer);
True: (T2: Double);
{$A+}
end;
function FieldOffset(const Struct, Field): Cardinal;
begin
Result := Cardinal(Addr(Field)) - Cardinal(Addr(Struct));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Test: TTest;
begin
ShowMessage(
'T1: ' + IntToStr(FieldOffset(Test, Test.T1)) + #13#10 +
'T2: ' + IntToStr(FieldOffset(Test, Test.T2))
);
end;
Ergebnis (Delphi 6):
Ziel sollte aber sein, dass beide Offsets 8 sind (wie in der C-Referenzstruktur).
Gruß Nico