Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TList als Rückgabeparameter [erledigt] (https://www.delphipraxis.net/118751-tlist-als-rueckgabeparameter-%5Berledigt%5D.html)

Moony 14. Aug 2008 09:06


TList als Rückgabeparameter [erledigt]
 
Hallo zusammen,

ich möchte innerhalb einer Funktion ein paar werte in einer TList speichern. Am Ende der Funktion möchte ich die gefüllte Liste als Rückgabewert an den Result übergeben. Das mach ich folgendermaßen:

aufrufende Zeile:
Delphi-Quellcode:
// locale Variable vom Typ TList
TempList := SaveList();
die Funktion SaveList:
Delphi-Quellcode:
function TfmMain.SaveList: TList;
var Lst : TList;
begin
  Lst := TList.Create;
  try
    New(Pointer);
    try
      for i := 0 to Zähler - 1 do
      begin
        Pointer^.Variable := Fülle mit irgendwas
        ...
        Lst.Add(Pointer);
      end;
    except
      Dispose(Pointer);
    end;
  finally
    Result := Lst; // habs auch mit Result.Assign(Lst) versucht
    Lst.Free;
  end;
end;

Der Punkt ist, dass die Listeninhalte aus der Funktion nicht an die TempListe übergeben werden. Hoffe ihr könnt mir helfen.

Gruß, Moony

mkinzler 14. Aug 2008 09:09

Re: TList als Rückgabeparameter
 
Du gibst einen Zeiger auf die Liste zurück und zerstörst diese anschliessend

Moony 14. Aug 2008 09:13

Re: TList als Rückgabeparameter
 
Ich will ja den kompletten Inhalt der Liste an die andere übergeben, sprich kopieren. Danach brauche ich dann diese Liste nicht mehr.

omata 14. Aug 2008 09:13

Re: TList als Rückgabeparameter
 
Folgendes ist sinnvoller...

Delphi-Quellcode:
procedure TfmMain.SaveList(Lst: TList);
begin
  New(Pointer);
  try
    for i := 0 to Zähler - 1 do
    begin
      Pointer^.Variable := Fülle mit irgendwas
      ...
      Lst.Add(Pointer);
    end;
  except
    Dispose(Pointer);
  end;
end;

procedure TfmMain.Aufruf;
var List:TList;
begin
  List:=TList.Create;
  try
    SaveList(List);
  finally
    List.Free;
  end;
end;

DeddyH 14. Aug 2008 09:16

Re: TList als Rückgabeparameter
 
Ich würde den Parameter noch als const definieren.

xaromz 14. Aug 2008 09:18

Re: TList als Rückgabeparameter
 
Hallo,

außerdem ist es etwas sinnlos, einen Pointer zu erstellen, ihn zuzuweisen und anschließend wieder freizugeben.

Gruß
xaromz

mkinzler 14. Aug 2008 09:19

Re: TList als Rückgabeparameter
 
Zitat:

Ich will ja den kompletten Inhalt der Liste an die andere übergeben, sprich kopieren. Danach brauche ich dann diese Liste nicht mehr.
Bei Klassentypen wird aber nicht der Inhalt, sondern eine Referenz zurückgegeben

Moony 14. Aug 2008 09:20

Re: TList als Rückgabeparameter
 
Das habe ich mir auch überlegt, aber so wie du die liste übergibst ist das doch nur callbyvalue. Das heißt ich übergebe den inhalt der liste an die funktion aber nicht die liste selbst. Dabei müßte ich doch ein callbyreference machen, oder nicht?
Hierbei muß aber die bezeichnung der variable identisch mit der übergabeliste sein. ich möchte diese funktion aber nutzen und mindestens mit zwei unterschiedlichen listen arbeiten.

Sprich mal
Delphi-Quellcode:
TempListe := SaveListe();
Und mal
Delphi-Quellcode:
MeineListe := SaveListe();

DeddyH 14. Aug 2008 09:21

Re: TList als Rückgabeparameter
 
Objekt-Parameter werden automatisch ByReference übergeben.

mkinzler 14. Aug 2008 09:23

Re: TList als Rückgabeparameter
 
Dann übergebe doch die Zielliste wie schon geschrieben als Parameter.

Delphi-Quellcode:
SaveListe( TempListe);


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz