![]() |
RTTI im Record Feldlänge
Hallo,
eine etwas kompliziertere Angelegenheit. Ich möchte aus einem beliebigen Record Asciistrings auslesen und setzen. Dazu deklariere ich einen Record z.B.
Delphi-Quellcode:
Ich rufe meine Procedure auf mit
TMyRecord = record
PLZ : string[6]; Ort : String[50]; end;
Delphi-Quellcode:
ImpRec ist eine Instanz von TMyRecord.
Showrec(ImpRec, TypeInfo(TMyRecord) );
Dann werte ich die Typinformationen aus:
Delphi-Quellcode:
Beim Iterieren durch f bekomme ich Feldnamen und Offset.
Context := TRttiContext.Create();
Inf := context.GetType( typeInf ); LRecord := Inf.asRecord; f := LRecord.GetDeclaredFields; for i := 0 to High(f) do Listbox1.items.Add(f[i].Name + ' : ' + inttostr(f[i].Offset) ); Leider aber nicht in der Deklarierungsreihenfolge. Wie komme ich jetzt an die Stringlänge heran? Also PLZ = 6 und Ort = 50? Für einen Tipp dankbar. Gruß Peter |
AW: RTTI im Record Feldlänge
Da Real48 und string[] keine RttiType Informationen haben, wird das schwierig. Du könntest alle Record-Definitionen mit Attributen versehen. Also:
Delphi-Quellcode:
Und dann müsstest Du, wenn FieldType des RttiField nil ist, versuchen ob ein solches Attribut vorhanden ist und dieses auslesen.
TMyRecord = record
[ShortString(6)] PLZ : string[6]; [ShortString(50)] Ort : String[50]; end; |
AW: RTTI im Record Feldlänge
Ich würde mir generell ein anderes System überlegen und mich nicht von der RTTI abhängig machen.
Dazu müsste man aber wissen was genau du vorhast und die Hintergründe kennen. |
AW: RTTI im Record Feldlänge
Moin moin,
also theoretisch könntest du ja anhand des Offsets die Länge der Strings berechnen - vermutlich wird bei dir PLZ ein Offset 0 haben und Ort Offset 7. Damit hättest du schon mal die Größe von PLZ. Offset(Ort) - Offset(Plz) = 7 7 - 1 (1 Byte für die Längeninformation) = 6 = länge des Strings Und die Größe vom letzten Feld könntest du anhand der Recordgröße - Offest(Ort) - 1 Byte ermitteln... Aber das sind alles nur Vermutungen. Wenn - wie Union sagte - keine Informationen über den FieldType bekommst, dann wird das ja so nicht funktionieren wenn noch andere Typen im Record enthalten sind... |
AW: RTTI im Record Feldlänge
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz