Erstmal, wenn es automatisch konvertiert wird und z.B. auf einem
anderen Rechner zurück, dann kann es knallen.
z.B. deutsches
Windows System speichjert einen Float mit
,
als Dezimalseparator und im Englischen knallt es im besten Fall, aber vermutlich bekommst einfach nur den falschen Wert, weil ein englisches System das als Tausendertrennzeichen interpretiert.
MyString := MyVariant;
geht meisten, aber knallt wenn NULL oder Empty oder es sich nicht nach String konvertieren lässt (Arrays und CustomTypes ohne passend registriertem Converter)
MyVariant := MyString;
geht natürlich immer
und später dann z.B.
MyInteger := MyVariant;
würde funktionieren, wenn es ein Byte/Word/Integer/... ist, bzw. wenn es sich dahin konverzieren lässt, wie z.B. eine Zahl '123' im String.
Natürlich kann man auch direkt selber Konvertieren, also prüfen, ob der String einem bestimmten Format entspricht, das selbst konvertieren und dem Variant zuweisen.
Delphi-Quellcode:
if TryStrToInt(MyString, i) then
MyVariant := i
else
...
Na, natürlich kann man einem generischen Marker (Nummer oder Text) mit im String speicher, um zu wiessen, was es für ein Wert war. (z.B. siehe .reg-Dateien, wenn man dort DWORD oder binäre Werte exportiert/speichert)
Auch die binäre Version der
DFM speichert vor jedem Wert, was für ein Typ gleich folgt-