Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
Delphi 10.1 Berlin Enterprise
|
AW: RTTI: GetPropValue(TTimeSpan)
27. Jun 2019, 13:00
TTimeSpan hat ja nur ein Feld des Typs Int64, also sollte technisch möglich sein, hier GetInt64Prop aufzurufen, aber das geht dann nur deshalb, weil TTimeSpan dasselbe Layout wie ein Int64 hat, für keine anderen Records (*). Dann hast du aber den Wert aus dem FTicks Feld in deinem Variant.
Übrigens, bitte keine Typüberprüfung per Namen - besser ist es so:
if LPropList[APropIndex].PropType^ = TypeInfo(TTimeSpan) then
(*) Nachtrag: Ich würde sicherheitshalber noch ein Assert(SizeOf(TTimeSpan) = SizeOf(Int64)) reinschreiben, dass es nicht irgendwann bei einer Änderung ein böses Erwachen gibt (das wird sogar zur Compilezeit ausgewertet, so dass das Assert gar nicht in der Binary landet, wenn die Bedingung wahr ist)
Es ist sogar möglich, den Fehler zur Compilezeit zu bekommen, seh ich gerade:
{$IF SizeOf(TTimeSpan) <> SizeOf(Int64)}{$MESSAGE ERROR 'TTimeSpan does not have the same size as Int64'}{$IFEND}
Geändert von Stevie (27. Jun 2019 um 13:09 Uhr)
|