Ich habe mir gerade das Tutorial von Narses zu einem Chatprogramm durchgelesen. (
www.delphi-library.d...rial+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 cmdNOP: ; cmdSAID: Log.Lines.Add(Data.Strings[1]+': '+Data.Strings[2]); cmdUSER: Clients.Items.CommaText := Data.Strings[1]; else Log.Lines.Add('Unbekanntes Kommando: '+Data.Strings[0]); end; for i := 1 to Syntax[Command].ArgCount do Data.Delete(0); 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
Narses: Topic aus Dateizugriff verschoben am So 07.09.2008 um 23:47
Moderiert von
Narses: URL-Tag hinzugefügt