Autor Beitrag
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Do 10.10.02 15:30 
Hallo!

Ich möchte meinen in traditionellem OOP geschriebenen Code automatisierbar machen, deshalb bastele ich gerade daran, alle meine Objekte von o.g. Klasse abzuleiten, um den Zugriff per COM zu ermöglichen.

Dabei ergibt sich dann jedoch folgendes Problem:
Gebe ich das Objekt mit free frei, bekomme ich Zugriffschutzverletzungen; solche Objekte werden eigentlich automatisch von dieser Garbage-Collection freigegeben, sobald keine Schnittstellen-Referenzen zu diesem Objekt mehr existieren.

Eine automatische Freigabe wird aber bei meiner Objektstruktur nie erfolgen, weil ich die einzelnen Objekte sich untereinander referenzieren lasse (z.B. über eine Eigenschaft Owner).

Wie löse ich also dieses Problem? Hat jemand eine Lösung?

Cu, :D
Udontknow
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Do 10.10.02 18:39 
Hallo, wie wäre es, wenn du die referenz auf dein objekt einfach dann mit nil belegst?

Gruß
Ken
Udontknow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Do 10.10.02 21:04 
hi!

Danke für die Antwort, aber genau das klappt eben nicht.


Folgendes: Ich erstelle mein Objekt so:
ausblenden Quelltext
1:
2:
3:
4:
var InterfaceZuMeinemObjekt:IMeinInterface;
begin
  InterfaceZuMeinemObjekt:=TMeineKlasse.Create;
end;
Jedes andere Objekt mit einer Schnittstelle würde sich nun durch den Aufruf von
ausblenden Quelltext
1:
InterfaceZuMeinemObjekt:=NIL;					

von der GarbageCollection erfasst und freigegeben, richtig? Nicht aber mein Objekt, denn dieses hat in sich auch wieder einen TInterfacedObject-Nachfahren, der über die Eigenschaft FOwner eben eine Referenz auf das Objekt hält.

Oder meinst du, das ich dann in jedem untergeordneten Objekt erst FOwner auf NIL schalten muss? Uff, das ist aber aufwendig... :shock:
Gibt es denn keine Möglichkeit, die Lebenszeit meiner Objekte unabhängig von dieser Referenzzählung zu handhaben? Mir ist gar nicht wohl bei dem Gedanken, daß das ganze Konstrukt bestehen bleibt, nur weil irgendwo irgendein kleiner Pointer noch nicht auf NIL gesetzt wurde...

Cu,
Udontknow
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Sa 12.10.02 17:47 
die referenzzählung ist aber für interfaces lebenswichtig.

also kannst du das nicht umgehen.
Das Objekt, welches ein interface referenziert wird ja auch erst frei gegeben, wenn der zähler refcount = 0 ist

viel erfolg noch