Dein Problem liegt an SizeOf(): Ein Integer ist ein primitiver Datentyp, d.h. er stellt keine Referenz auf ein anderes Objekt dar. Er belegt auf einer 32-bit Architektur 4 Byte. Ein String ist jedoch kein solch ein primitiver Datentyp. Du kannst einen String eher als eine
class ansehen, die auf eine Zeichenkette zeigt, d.h. auf ein
array of char (in Java ist ein String sogar genau so definiert). Eine Referenz ist also ein Pointer, d.h. auf einer 32-bit Architektur belegt er ebenfalls 4 Byte. SizeOf() bestimmt also nur die Größe des direkten Typs, nicht aber das Objekt, was hinter einer Referenz "verborgen" ist.
Du kannst dies wunderbar an einem Beispiel testen:
Delphi-Quellcode:
type
TData = record
int : Integer;
s : String;
end;
[...]
var
d: TData;
begin
d.s := 'ebhfgoaehfab'; // Größe des Strings wirkt sich nicht auf die Größe des records aus
ShowMsg(SizeOf(d)); // z.B. MessageBox() o.Ä.
end;
Egal wie viele Zeichen Du dem String zuweist, es wird immer 8 Byte ausgegeben.
Mein Vorschlag:
Du musst die Länge aller nicht-primitiven Typen selbst zu der Größe des records addieren.
Jute Nacht, Nogge