Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Übergeben einer TStringlist


Mortal-Shadow - So 07.09.08 23:46
Titel: Übergeben einer TStringlist
Ich habe mir gerade das Tutorial von Narses zu einem Chatprogramm durchgelesen. (http://www.delphi-library.de/topic_ProtokollChatTutorial+V300_54269.html)
Bis auf eines ist mir das ganze auch relativ klar.
Und zwar gibt es eine procedur:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.ParseBuffer;
var
Data : TStringlist;
{...}
begin
Data := TStringlist.create;
try
        {...}

                        execute(Current, Data); 
                {...}
finally
        Data.free;
end;

hierbei wird mit der stringlist gearbeitet.
Dann wird sie der Prozedur execute übergeben, welche folgendes macht.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Execute(const Command: TCmdToken; Data: TStringList);
var i : Integer;
begin
case Command of // Befehle fallunterscheiden:
cmdNOP: // naja, eben nichts tun...
;
cmdSAID: // Text mit Autorenangabe anzeigen
Log.Lines.Add(Data.Strings[1]+': '+Data.Strings[2]);
cmdUSER: // User-Liste aktualisieren
Clients.Items.CommaText := Data.Strings[1];
else // ungültiges Kommando loggen und dann wegwerfen
Log.Lines.Add('Unbekanntes Kommando: '+Data.Strings[0]);
end;
// verarbeitete Werte löschen
for i := 1 to Syntax[Command].ArgCount do // soviele Werte, wie dieser Befehl hat
        Data.Delete(0); // aus der Befehlskette (vorne!) löschen

end;

Wichtig dabei ist, dass die stringlist data nur in execute 'gekürzt' wird.
Die prozedur parsebuffer hat sogar eine whileschleife, welche funktioniert, solange noch Inhalt in 'Data' ist.
Trotzdem wird diese nicht zu einer endlosschleife.
Ganz offensichtlich wird also von beiden prozeduren auf den gleichen adressbereich zugegriffen.
Warum ist das so?
Wird wenn eine stringlist übergeben wird, standartmäßig ihre adresse, statt ihr wert übergeben?
Gruß, MS.


Moderiert von user profile iconNarses: Topic aus Dateizugriff verschoben am So 07.09.2008 um 23:47
Moderiert von user profile iconNarses: URL-Tag hinzugefügt


Narses - So 07.09.08 23:49
Titel: Re: Übergeben einer TStringlist
Moin!

user profile iconMortal-Shadow hat folgendes geschrieben:
Wird wenn eine stringlist übergeben wird, standartmäßig ihre adresse, statt ihr wert übergeben?
Genau so ist das, es handelt sich hierbei ja um ein Objekt, die als Zeiger repräsentiert werden. ;)

cu
Narses