Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: RTTI: GetPropValue(TTimeSpan)

  Alt 27. Jun 2019, 12: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}
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (27. Jun 2019 um 12:09 Uhr)
  Mit Zitat antworten Zitat