Forum: Programmieren allgemein
by rollstuhlfahrer,
22. Mär 2011
Ich sagte doch: Interfaces richtig benutzen. Das hier ist ein Quick&Dirty, vor allem Dirty, Workaround, der es dem TE erleichtern soll, das ganze zu managen, weil scheinbar immernoch ein paar Probleme mit Interfaces und deren Benutzung existieren.
Bernhard
Forum: Programmieren allgemein
by rollstuhlfahrer,
22. Mär 2011
Meine Meinung? - Einfach die Interfaces richtig verwenden und schon klappt das.
Bernhard
Forum: Programmieren allgemein
by rollstuhlfahrer,
22. Mär 2011
So grob stimmt das. Du definierst ein Free in deinem Interface und schon ist es zugänglich. Free ist bei deinem Objekt schon definiert und zieht mit deinem TInterfacedPersistent ein (passiert auch bei TInterfacedObject). Free sorgt dafür, dass das Objekt verschwindet. Heißt also: Von außen Free aufrufen und weg ist das Objekt.
Bernhard
ADD: Eben so, als würdest du das Objekt vor dir haben.
Forum: Programmieren allgemein
by rollstuhlfahrer,
22. Mär 2011
Falsche Richtung.
type
IMyInterface = interface(IUnknown)
public
// ...
procedure Free;
end;
Forum: Programmieren allgemein
by rollstuhlfahrer,
22. Mär 2011
Natürlich hast du immer ein Objekt, da man Klassen nur ableiten kann und die Grundklasse, die immer dabei ist ist TObjekt.
Du kannst dir das wie eine Hierarchie vorstellen und an der Spitze steht immer TObject.
Bernhard
Forum: Programmieren allgemein
by rollstuhlfahrer,
22. Mär 2011
.Free ist eine Methode deines OBJEKTES und diese Methode existiert weiterhin. Da sie in TObject definiert worden ist, sollte es kein Problem sein, diese zu verwenden.
Was sie macht: Nach einer Prüfung, ob das Objekt überhaupt existiert, wird Destroy veranlasst.
Bernhard
Forum: Programmieren allgemein
by rollstuhlfahrer,
22. Mär 2011
Der GC macht ja nichts anderes als .Free aufzurufen, wenn keine Instanzen mehr vorhanden sind. Wenn du jetzt den Referenzzähler nicht benutzt, brauchst du eine Methode, die zumindest intern .Free aufruft. Du kannst aber auch das Free über dein Interface nach außen geben.
Bernhard
Forum: Programmieren allgemein
by rollstuhlfahrer,
22. Mär 2011
Es hängt ja nicht daran, wo was ist und für was es verwendet werden soll, sondern wie die Typen gebraucht werden. Für ein Interface gibt es einen automatischen Referenzzähler (also ein Garbage Collector für Delphi, der funktioniert). Dieser funktioniert allerdings nur dann korrekt, wenn man keine Objekt-Typen mehr verwendet, sondern nur noch Interface-Typen.
2. Stoplerstein: Wenn ein Interface...
Forum: Programmieren allgemein
by rollstuhlfahrer,
21. Mär 2011
Interfaces lösen sich selbst auf, sobald nicht mehr auf sie zugegriffen wird (Referenz-Zähler = 0). Hast du eventuell eine gleichnamige lokale Variable zu deiner eventuell vorhandenen globalen Variable?
Bernhard