Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - erzeugen einer klasse in einem array zur laufzeit


yogo - So 23.05.10 20:43
Titel: erzeugen einer klasse in einem array zur laufzeit
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;//funktioniert
      peers[peercnt] := tmppeer;//hier tritt der fehler auf
      peers[peercnt].dstr := Copy(tmpstr, 5, PInteger(@tmpstr[1])^);
      Delete(tmpstr, 14 + PInteger(@tmpstr[1])^);
      eigen^.Items.Add(Copy(tmpstr, 5, PInteger(@tmpstr[1])^));
      Delete(tmpstr, 14 + 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 user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Mo 24.05.2010 um 19:52


Delete - So 23.05.10 21:07

Du musst auch die Länge des dynamischen Arrays setzen mit SetLength.


yogo - So 23.05.10 21:10

:lol: Super, funktioniert. Man bin ich blöd... :oops: