Hallo.
Es geht um
Funktionen, die für die Rückgabe einen Datentyp besitzen, der innerhalb der
Funktionen ersteinmal erstellt werden muss.
Als Beispiel soll folgender Code dienen, den ich in einem älteren Posting fand:
Delphi-Quellcode:
function GetFileIcon(AFileName: string; AIndex: integer = 0): TIcon;
begin
Result := TIcon.Create;
Result.Handle := ExtractIcon(HInstance, PCHAR(AFileName), AIndex);
end;
Ich habe zum Testen nun simpel und einfach eine Zuweisung vorgenommen, die auch tadellos funktioniert:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
// Icon aus Exe auslesen und Image zuweisen
Image1.Picture.Graphic := GetFileIcon('C:\Windows\NotePad.exe');
end;
Startet man nun den Taskmanager, so kann man schön beobachten, wie der Speicherbedarf dieser Testanwendung steigt, wenn man vielfach auf den Button klickt.
Nun betrachte ich stattdessen eine
Prozedur als Lösung, bei der ich im ButtonClick eine TIcon-Variable anlege, erstelle und der
Prozedur als Var-Parameter übergebe. Kehrt der Ablauf nach der
Prozedur in das ButtonClick zurück, erfolgt die Zuweisung an Image1.Picture.Graphic. Danach gebe ich diese TIcon-Variable im ButtonClick frei.
Hierbei ist im Taskmanager beim Klicken auf den Button
kein Zuwachs an Speicherbedarf zu erkennen.
Fazit:
Offensichtlich werden die Speicherresourcen nicht freigegeben, die von der
Funktionen mit TIcon als Datentyp belegt wurden.
Frage:
Wie kann man den belegten Speicher einer
Funktionen, wie sie in obigen Beispiel zu sehen ist, wieder freigeben?
Guido.