AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi COM: TInterfacedObject-Nachfahren explizit freigeben
Thema durchsuchen
Ansicht
Themen-Optionen

COM: TInterfacedObject-Nachfahren explizit freigeben

Ein Thema von Udontknow · begonnen am 11. Okt 2002 · letzter Beitrag vom 14. Okt 2002
Antwort Antwort
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.421 Beiträge
 
Delphi 12 Athens
 
#1
  Alt 11. Okt 2002, 09:02
Hi,

erst einmal zum Begriff "Garbage-Collection" COM unterstützt eine solche Garbage-Collection nicht in diesem Sinne. COM Objekte werden, wie Du es bereits geschrieben hast, durch Referenzzähler "am Leben" erhalten.

Wenn auf ein COM Objekt verwiesen wird, so wird bei Delphi automatisch die Methode _AddRef aufgerufen, welche den Referenzzähler um eins erhöht. Wenn der Verweis auf ein COM Objekt verfällt oder gelöscht wird, so wird die Methode _Release aufgerufen. Dadurch wird der Referenzzähler um eins verringert. Erreicht dieser 0, so wird vom Objekt die Methode Destroy aufgerufen. ("Auto-Referenced Objects")

Wenn Du jetzt Referenzen zwischen zusammenhängenden Objekten verteilen musst, dann gibt es grundlegend drei Möglichkeiten.

1. (unfein ) Das von "aussen" erstellte Objekt muss via einem Sonderaufruf (z.B. Object.AllDone) informiert werden, dass es intern all Referenzen auf von ihm erstellte Objekte freigeben soll.

2. (sehr schwer realisierbar) Du erstellst in Deinen Objekte eine Methode zum Override der Funktionen
Code:
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
; Diese müssen dann die entsprechenden Verhältnisse prüfen und gegebenenfalls Referenzen freigeben.

3. (hat auch Vor- und Nachteile) Du übergibst zwischen den erstellten Objekten nicht die COM-Schnittstellen sondern die Objekte selbst. Dadurch verlierst Du leider die Garantie, das ein referenziertes Objekt wirklich noch existiert, ausser Du kreierst eine Art "Event-Sink", an dem sich das referenzierende Objekt anmeldet, um zu erfahren, sobald das referenzierte Objekt zerstört wird.

Ich hoffe das hat geholfen.

Ciao,
......
Lizbeth W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz