Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   FreePascal Speicher Freigeben (https://www.delphipraxis.net/163458-speicher-freigeben.html)

stiftII 30. Sep 2011 01:41

AW: Speicher Freigeben
 
Vielen Dank :) .. werde es dann so machen, dass ich eine temp Variable mit übergebe und aus der Funktion mache ich dann eine Prozedur.

Dachte es gäbe vllt, wie bei Java eine Möglichkeit nicht benötigte Resourcen zu identifizieren und freizugeben.

stiftII

Sir Rufo 30. Sep 2011 03:18

AW: Speicher Freigeben
 
Zitat:

Zitat von stiftII (Beitrag 1127589)
Vielen Dank :) .. werde es dann so machen, dass ich eine temp Variable mit übergebe und aus der Funktion mache ich dann eine Prozedur.

Dachte es gäbe vllt, wie bei Java eine Möglichkeit nicht benötigte Resourcen zu identifizieren und freizugeben.

stiftII

Gibt es schon, wenn du dir eine Stringliste als Interface baust. :stupid:

stiftII 30. Sep 2011 13:20

AW: Speicher Freigeben
 
Zitat:

Zitat von Sir Rufo (Beitrag 1127591)
Zitat:

Zitat von stiftII (Beitrag 1127589)
Vielen Dank :) .. werde es dann so machen, dass ich eine temp Variable mit übergebe und aus der Funktion mache ich dann eine Prozedur.

Dachte es gäbe vllt, wie bei Java eine Möglichkeit nicht benötigte Resourcen zu identifizieren und freizugeben.

stiftII

Gibt es schon, wenn du dir eine Stringliste als Interface baust. :stupid:

:stupid: Macht das sinn xD?

stiftII 30. Sep 2011 14:11

AW: Speicher Freigeben
 
Kurze Frage nochmal hierzu.

Warum funktioniert das so nicht ("function ExtraColumsStringsDB" erstellt die Stringlist) ?

Delphi-Quellcode:
function ExtraColumsStringsDB(firma:string; ASL: TStringlist): Boolean;
var
  Temp: Array Of TColumn;
  i: integer;
begin
  try
    Result := True;
    SL := TStringList.Create;
    Temp := GetExtraFields(firma);
    for i:=0 to high(Temp) do
    begin
      ASL.Add(Temp[i].FieldName );
    end;
  except
    Result := False;
  end;
end;

procedure dosomething;
var
  SL:TStringList;
begin
  try
    ExtraColumsStringsDB('EINEFIRMA', SL);
  finally
    SL.Free;
  end;
end;

DeddyH 30. Sep 2011 14:14

AW: Speicher Freigeben
 
Weil der Stringlisten-Parameter const deklariert ist? Aber das ist die merkwürdigste Variante, die ich hier bislang gesehen habe, ist das nur zum Herumprobieren, oder willst Du das tatsächlich produktiv so einsetzen?

stiftII 30. Sep 2011 14:20

AW: Speicher Freigeben
 
Zitat:

Zitat von DeddyH (Beitrag 1127758)
Weil der Stringlisten-Parameter const deklariert ist? Aber das ist die merkwürdigste Variante, die ich hier bislang gesehen habe, ist das nur zum Herumprobieren, oder willst Du das tatsächlich produktiv so einsetzen?

Ups, der ist nicht konstant, ich hatte nur das Beispiel von angos kopiert/editiert. Hab das mal rauseditiert.

Ja, ich würde das gerne "produktiv einsetzen" ;). Meine Funktion/Prozedur sieht so aus:

Delphi-Quellcode:
procedure ExtraColumnsStringsDB(firma:string; ColumnStrings:TStringlist);
var
  Temp: Array Of TColumn;
  i: integer;
begin
     Temp := GetExtraFields(firma);
     for i:=0 to high(Temp) do
     begin
       ColumnStrings.Add(Temp[i].FieldName );
     end;
     //Free all columns
     for i:=0 to high(Temp) do
     begin
       Temp[i].Free;
     end;
end;
Das geht so auch, mich würde nur interessieren, warum die andere Variante nicht funktioniert (Access Violation).

Grüße
stiftII

DeddyH 30. Sep 2011 14:24

AW: Speicher Freigeben
 
Rein akademisch: ich denke, wenn Du es so machen willst, musst Du SL als Var-Parameter übergeben.

p80286 30. Sep 2011 14:55

AW: Speicher Freigeben
 
Zitat:

Zitat von stiftII (Beitrag 1127755)
Delphi-Quellcode:
function ExtraColumsStringsDB(firma:string; ASL: TStringlist): Boolean;
var
  Temp: Array Of TColumn;
  i: integer;
begin
  try
    Result := True;
    SL := TStringList.Create;      {--- und wofür wird SL genutzt?}
    Temp := GetExtraFields(firma);
    for i:=0 to high(Temp) do
    begin
      ASL.Add(Temp[i].FieldName );
    end;
  except
    Result := False;
  end;
end;

procedure dosomething;
var
  SL:TStringList;
begin
  { hier fehlt ein SL:=tstringlist.Create!!!!!!}
  try
    ExtraColumsStringsDB('EINEFIRMA', SL);
  finally
    SL.Free;
  end;
end;

Gruß
K-H

stiftII 30. Sep 2011 15:04

AW: Speicher Freigeben
 
Da fehlt nen A in der Funktion. Hatte die nur so kopiert :x

Jetzt aber:

Delphi-Quellcode:
function ExtraColumsStringsDB(firma:string; ASL: TStringlist): Boolean;
var
  Temp: Array Of TColumn;
  i: integer;
begin
  try
    Result := True;
    ASL := TStringList.Create;
    Temp := GetExtraFields(firma);
    for i:=0 to high(Temp) do
    begin
      ASL.Add(Temp[i].FieldName );
    end;
  except
    Result := False;
  end;
end;

procedure dosomething;
var
  SL:TStringList;
begin
  try
    ExtraColumsStringsDB('EINEFIRMA', SL);
  finally
    SL.Free;
  end;
end;

himitsu 30. Sep 2011 15:23

AW: Speicher Freigeben
 
Zitat:

Zitat von DeddyH (Beitrag 1127761)
Rein akademisch: ich denke, wenn Du es so machen willst, musst Du SL als Var-Parameter übergeben.

Da er nichtmal prüft, ob vorher nicht schon eine Stringliste in dem Parameter übergeben wurde,
sollte er es sogar mit OUT, anstatt VAR deklarieren,
damit man gleich weiß was auf einen zukommt, wenn man diesen Funktionsheader sieht.


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

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