Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

AW: array of const für spätere Verwendung speichern

  Alt 1. Feb 2016, 10:47
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 1. Feb 2016 um 10:53 Uhr)
  Mit Zitat antworten Zitat