Was sind "nummerische Werte"?
Delphi-Quellcode:
TVarRec = record { do not pack this record; it is compiler-generated }
case Integer of
0: (case Byte of
vtInteger: (VInteger: Integer);
vtExtended: (VExtended: PExtended);
vtString: (VString: PShortString);
vtAnsiString: (VAnsiString: Pointer);
vtCurrency: (VCurrency: PCurrency);
vtVariant: (VVariant: PVariant);
vtWideString: (VWideString: Pointer);
vtInt64: (VInt64: PInt64);
vtUnicodeString: (VUnicodeString: Pointer);
Alles größer als Integer wird per Pointer referenziert und lebt nur so lange, wie es der aufrufende Code bereitstellt.
Strings sind referenzgezählt und in diesem Array wird die Referenz nicht mitgezählt (CONST) ... geht der Referenzzähler auf 0, so ist der String weg.
Fazit:
Du mußt selber einen Speicherplatz bereitstellen und die Inhalte umkopieren, wenn sie nicht im aktuellen Programmpfad behandelt werden.
z.B. ein paar Array of AnsiString/UnicodeString/Int64/Extended/Variant, auf deren Speicher dann deine TVarRec zeigen.
(alternativ nur Array of Variant und alles nach Variant konvertieren)
New/Dispose wären auch möglich, aber so mußt du dich nicht um das (interne) Speichermanagement kümmern.