Ah ja, hätte mich bei dir auch gewundert, wenn die Frage so leicht zu beantworten wäre.
Ich denke mal, das Problem liegt darin, daß nur der Compiler weiß, wie die Records wirklich aligned sind - und das kann sich ja im Source an jeder Stelle ändern.
Spontan fällt mir folgende Lösung ein: Du übergibst bei TXMLSerializeRecordInfo.Create eine Record-Instanz als Parameter und bei jedem Add einen Pointer auf das jeweilige Feld. Dann kanst du die Offsets direkt berechnen. Nebenbei kann dann auch die Reihenfolge beliebig sein und es können Felder weggelassen werden.
Delphi-Quellcode:
RI := TXMLSerializeRecordInfo.Create(Data);
Try
RI.Add('Time', rtInteger, Data.Time);
RI.Add('Size', rtInt64, Data.Size);
RI.Add('Attr', rtInteger, Data.Attr);
RI.Add('Name', rtString, Data.Name);
...
Oder man steigt gleich auf D2010 um und benutzt
RTTI