title image


Smiley Re: Problem mit der Freigabe von Objekten
Hallo, etwas genauer:

Der Programmierer kann meiner FilterGrid-Komponente eine Komponente (TEdit, TLabel usw.) oder Methode übergeben.

Bei einer Komponente wird einfach die Referenz zu dieser in TList eingetragen.

Bei einer Methoden erzeugt meine FilterGrid-Komponente einen Container-Objekt (TProzContainer) zur Aufnahme der Methode und trägt die Referenz zu diesem in TList ein.



Die FilterGrid-Komponente muss deshalb die Container-Objekte wieder freigeben. Die anderen Komponenten dürfen nicht freigegeben werden. Sie werden ja vom Formular verwaltet.

Hier der Code für die Freigabe:



procedure FreeObjectLst(var lst: TList);

var ob : TObject;

i : integer;

begin

if lst nil

then begin

for i := 0 to lst.Count-1 do begin

ob := Lst[i];

if ob is TProzContainer

then

with ob as TProzContainer do

Free;

end;

lst.Free;

lst := nil;

end;

end;



Da bei der Freigabe des Formulars einige Komponenten vor meiner Komponete freigegeben werden, ist dann die Referenz von Lst[i] undefiniert. Beim Lesen dieser Refernz kommt dann die Zugriffsverletzung. Der Test mit Assigned(Lst[i]) hilft da auch nicht. Da lt. D6-Hilfe: "Assigned kann keine Zeiger erkennen, die zwar nicht nil sind, aber trotzdem nicht mehr auf gültige Daten verweisen."

Ich könnte versuchen mit try except den Fehler abzufangen. Ist aber auch nicht das Gelbe vom Ei.





Ich hoffe ich habe mein Problem jetzt besser beschrieben.



Viele Grüße
www.RaabeSoftware.de.vu "Jede Lösung eines Problems ist ein neues Problem." Johann W. von Goethe

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: