b-t-o - Mo 16.04.07 13:25
Titel: Objekt kopieren
Hallo miteinander,
ich würde gerne den Inhalt eines Objektes (aus Funktionsaufruf) fest in einem Array speichern.
Meine bisherige Lösung speichert aber anscheinend nur die Referenzen, so dass alle Werte des Arrays immer gleich sind.
Hat jemand eine Idee?
Vielen Dank und viele Grüsse
Marc
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TTcpSrvForm.WSocketServer1ClientConnect( Sender : TObject; Client : TWSocketClient; Error : Word);
var Client2 : TTcpSrvClient; begin Aktuell_Request := Aktuell_Request + 1; requests[Aktuell_Request] := Client as TTcpSrvClient;
requests[Aktuell_Request].LineMode := FALSE; requests[Aktuell_Request].LineEdit := FALSE; requests[Aktuell_Request].LineLimit := 65535; requests[Aktuell_Request].OnDataAvailable := ClientDataAvailable; requests[Aktuell_Request].OnLineLimitExceeded := ClientLineLimitExceeded; requests[Aktuell_Request].OnBgException := ClientBgException; requests[Aktuell_Request].ConnectTime := Now; requests[Aktuell_Request].Anfrage_gesendet := FALSE; requests[Aktuell_Request].Anzahl_Headerlines := 0; requests[Aktuell_Request].Komplette_Anfrage := ''; requests[Aktuell_Request].Requestno := Aktuell_Request; requests[Aktuell_Request].inuse := TRUE; requests[Aktuell_Request].proxy_closed := TRUE; FreeandNil(requests[Aktuell_Request].Anfragesocket); end; |
JayEff - Mo 16.04.07 13:43
Titel: Re: Objekt kopieren
b-t-o hat folgendes geschrieben: |
| [...]speichert aber anscheinend nur die Referenzen,[...] |
Um genau zu sein, speicherst du in jedes Element des Arrays einen Pointer auf den selben Speicherbereich. Ändert sich dieser, ändert sich auch das im Array gespeicherte Objekt. Du müsstest Wert für Wert kopieren, schreib dir dazu vielleicht eine Prozedur.
Soweit ich weiß, gibt's aber auch eine Funktion zum kopieren von Objekten, mal abgesehen von
x := TXY.Create; x.Assign(aTXY);. Müsst ich mal nachgucken.
Für alles weitere müsste ich deinen Code lesen, der ist aber unleserlich, da er nicht von Delphi-Tags umschlossen ist! :mahn:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAG5835bb34780cd3eb7377675ad9b87f37}</span></span> So muss das aussehen.
Bitte ändere das doch einfach, in dem du die

-Taste (bzw. für den Inline-Editor, falls im Profil AJAX aktiviert ist, die

-Taste) rechts oben neben deinem Beitrag benutzt.
Edit: Ah ja, du machst eine Zuweisung vom ArrayElement auf den Client, damit speicherst du den Pointer im Array. Dass das nicht Crasht scheint mir ein Wunder, da, zumindest IIRC, der Client eine lokale Variable ist und der Speicherbereich am Ende der Prozedur freigegeben wird, wobei in deinem Array der Pointer auf einen bereits freigegebenen Speicherbereich stehen bleibt :shock: