Ich möchte zur Laufzeit einem Array aus der Klasse TPeer eine Instanz hinzufügen.
Leider kriege ich einen Laufzeitfehler(Could not write in address 0000000)
Die Klasse:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Tpeer = class Ip: string; port: integer; name: string; rschlng: string; function rddstr: string; procedure wrtdstr(eingabe: string); public property dstr: string read rddstr write wrtdstr; end; |
So ist der Array deklariert:
Delphi-Quelltext
1:
| peers: array of Tpeer; |
Der Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| peercnt := 0; while tmpstr <> '' do begin tmppeer := TPeer.Create; peers[peercnt] := tmppeer; peers[peercnt].dstr := Copy(tmpstr, 5, PInteger(@tmpstr[1])^); Delete(tmpstr, 1, 4 + PInteger(@tmpstr[1])^); eigen^.Items.Add(Copy(tmpstr, 5, PInteger(@tmpstr[1])^)); Delete(tmpstr, 1, 4 + PInteger(@tmpstr[1])^); peercnt := peercnt + 1; tmppeer.Free; end; peercnt := peercnt - 1; |
Ich habe es auch schon so versucht:
peers[peercnt] := Create;
Dadurch ändert sich aber auch nur die Addresse, in der Fehler erzeugt wird; der Fehler selber bleibt.
Ich hab auch schon versucht einen Array aus Pointern zu machen, funktionierte ebenso nicht, aber da ich möchte, dass meine TPeers auch ausserhalb der Methode existieren, macht das ohnehin wenig Sinn.
Es wäre echt super, wenn jemand eine Idee hat, ich bin jedenfalls am Ende meines Pascals.
EDIT: Mit einem statischen Array geht es, aber ich weiss leider vorher nicht, ob ich 20 peers haben werde oder 2000
Moderiert von
Narses: Topic aus VCL (Visual Component Library) verschoben am Mo 24.05.2010 um 19:52