Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#4

Re: Speicherausrichtung (Align) berechnen

  Alt 24. Nov 2009, 14:51
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
Uwe Raabe
  Mit Zitat antworten Zitat