Array of Const in Array of TVarRec speichern

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
RSE
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

Beitrag von RSE »

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.
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!

RSE
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"

Beitrag von RSE »

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:

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;
3. array of TVarRec kann später wieder als Argument als array of const übergeben werden.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Euklid
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"

Beitrag von Euklid »

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

RSE
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"

Beitrag von RSE »

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!

RSE
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"

Beitrag von RSE »

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!

RSE
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

Beitrag von RSE »

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!
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Antworten