Hallo!
Als Argument ist Array of Const ja erlaubt, aber als Typ für eine lokale (Klassen-)Variable nicht. Ich will aber das Array of Const-Argument lokal in meiner Klasse speichern... Wie realisiere ich das? TVarRec ist nicht typkompatibel zu Array of Const. Jeden möglichen Wert von vType abzufragen und den richtigen in meine Variable vom Typ TVarRec zu kopieren finde ich irgendwie zu aufwendig und unflexibel, das muss doch einfacher gehen.
Array of Const in Array of TVarRec speichern
-
- Beiträge: 462
- Registriert: Mi 30. Jul 2008, 13:11
- OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
- CPU-Target: 32Bit
- Kontaktdaten:
Array of Const in Array of TVarRec speichern
Zuletzt geändert von RSE am Sa 31. Okt 2009, 18:33, insgesamt 1-mal geändert.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
-
- Beiträge: 462
- Registriert: Mi 30. Jul 2008, 13:11
- OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
- CPU-Target: 32Bit
- Kontaktdaten:
Re: [gelöst] Array of Const in Klasse "speichern"
Lösung:
1. Das "speicherbare" Äquivalent zu array of const ist nicht TVarRec, sondern array of TVarRec... Flüchtigkeitsfehler
2. Die Zuweisung läuft folgendermaßen:3. array of TVarRec kann später wieder als Argument als array of const übergeben werden.
1. Das "speicherbare" Äquivalent zu array of const ist nicht TVarRec, sondern array of TVarRec... Flüchtigkeitsfehler
2. Die Zuweisung läuft folgendermaßen:
Code: Alles auswählen
FArgs: array of TVarRec;
...
procedure SetArgs(Args: array of const);
var
i: Integer;
begin
SetLength(FArgs,Length(Args));
for i := 0 to Length(Args)-1 do
FArgs[i] := Args[i];
end;
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Re: [gelöst] Array of Const in Klasse "speichern"
Hallo RSE,
das Kopieren von dynamischen Arrays kann mit dem Befehl Copy
http://lazarus-ccr.sourceforge.net/docs ... /copy.html" onclick="window.open(this.href);return false;
noch eleganter bewerkstelligst werden.
Vgl.: http://www.freepascal.org/docs-html/ref/refsu14.html" onclick="window.open(this.href);return false;
Viele Grüße, Euklid
das Kopieren von dynamischen Arrays kann mit dem Befehl Copy
http://lazarus-ccr.sourceforge.net/docs ... /copy.html" onclick="window.open(this.href);return false;
noch eleganter bewerkstelligst werden.
Vgl.: http://www.freepascal.org/docs-html/ref/refsu14.html" onclick="window.open(this.href);return false;
Viele Grüße, Euklid
-
- Beiträge: 462
- Registriert: Mi 30. Jul 2008, 13:11
- OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
- CPU-Target: 32Bit
- Kontaktdaten:
Re: [gelöst] Array of Const in Klasse "speichern"
Stimmt, da hab ich gar nicht dran gedacht, war so vom TVarRec abgelenkt... Danke 

Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
-
- Beiträge: 462
- Registriert: Mi 30. Jul 2008, 13:11
- OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
- CPU-Target: 32Bit
- Kontaktdaten:
Re: [gelöst] Array of Const in Klasse "speichern"
Ich muss mich berichtigen: Array of Const ist kein DynArrayType und somit nicht kompatibel zu Copy. Außerdem erstellt Copy auch nur wieder den gleichen Typ, wie ihm übergeben wird, und Array of Const ist nicht zuweisungskompatibel zu Array of TVarRec. Sonst hätt ich ja auch Copy wiederum nicht gebraucht, weil ich sowieso das ganze Array kopieren will 

Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
-
- Beiträge: 462
- Registriert: Mi 30. Jul 2008, 13:11
- OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
- CPU-Target: 32Bit
- Kontaktdaten:
Re: Array of Const in Array of TVarRec speichern
Hm, der Code, den ich oben angegeben habe, ist doch nicht das Gelbe vom Ei. Ich nehme an, es gibt ein ähnliches Problem wie bei Targion im Thread Merkwürdiges bei Übergabe von Record -> Programm. So lange ich in Args ['Teststring'] übergebe, funktioniert alles, aber wenn ich s := 'Teststring'; und dann als Args übergebe, klappt das nicht mehr, sobald die letzte Referenz auf s wieder freigegeben wurde. Gibt es trotzdem einen anderen Ausweg, als mich durch alle möglichen Werte für TVarRec.VType durchzuhangeln und eine entsprechende Behandlung durchzuführen (sprich: mich selbst um den Speicherplatz zu kümmern)?
Array of Const nervt so langsam richtig, ich hoffe das ganze ist wenigstens immernoch plattformunabhängig!
Array of Const nervt so langsam richtig, ich hoffe das ganze ist wenigstens immernoch plattformunabhängig!
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!