Zitat:
Delphi-Quellcode:
Result.FName := Trim(TEncoding.UTF8.GetString(LChars));
Result.FName := Utf8ToString(LChars);
OK, abgesehn vom TRIM sollte, UTF8.GetString und Utf8ToString doch eigentlich gleiche Ergebnisse liefern,
und wenn sie das nicht tun, dann sollte man besser auch gleich mit prüfen was dort schief läuft.
Ansonsten:
Warum gibt die Funktion einen Pointer zurück, anstatt des Records?
Gerade hier ist das eine Liebslingsstelle für Speicherlecks und dazumal es absolot sinnlos ist, weil immer was zurückgegeben wird im Delphi (XE) ist/war das auch noch ein Record.
Und an ein paar gewissen Stellen würde ich noch eine Bereichsprüfung einfügen.
Zitat:
ExpDayOfWeek := CReDoW[ADoW];
entweder die
{$RANGECHECKS ON}
aktiv,
oder mit Fehlermelduing
if ADoW > 6 then raise ...
oder zumindestens wildlaufende Speicherzugriffe abfangen
ExpDayOfWeek := CReDoW[ADoW mod 7];
, was hier möglich ist, also einfach den Überstand in die nachfolgenden Wochen verschieben.
Und sonst erstmal noch nicht weiter gesucht. (war so das "Schlimmste", was gleich auf den ersten Blick brutal ins Auge stach)