Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Lebenszeit-Kontrolle bei COM-Interfaces (https://www.delphipraxis.net/37832-lebenszeit-kontrolle-bei-com-interfaces.html)

Oxmyx 11. Jan 2005 00:45


Lebenszeit-Kontrolle bei COM-Interfaces
 
Um Ressourcen zu sparen, habe ich einen Manager programmiert, der Instanzen von COM-Objekten verwaltet. Z.B. habe ich zwei Interfacevariablen, die beide auf ein und das selbe COM-Objekt (das Interface IDirect3DTexture9) zeigen sollen. Wenn ich einfach zwei mal eine Ladefunktion aufrufe, die mir ein Interface mit einem Bild initialisiert (z.B. D3DXCreateTextureFromFileEx), dann habe ich nachher zwei Interfaces und die Daten doppelt im Speicher.
Daher sage ich meinem Manager, welche Ressource geladen werden soll (z.B. ein Bild), und der Manager schaut in einer internen Liste, ob das schon existiert und ein Interface existiert. Wenn ja, dann wird der Referenzzähler erhöht, und das Interface zurückgeliefert. Analog dazu gibt es eine Release-Methode, bei der der Manager den Referenzzähler so lange Release()d, bis er 0 erreicht hat und sich das Objekt auflöst. In der Theorie jedenfalls. In der Praxis kümmert sich Delphi selber darum, wie und wann der Referenzzähler erhöht wird, und wann nicht. Aber das will ich nicht, da ich mich ja selber darum kümmere. Wegen des Aufbaus und der Funktionsweise meines Managers kann die automatische Verwaltung von COM-Objekten in Delphi gar nicht funktionieren. Aber mir fällt auch keine andere Möglichkeit ein, diese Ressourcen zu verwalten. Ausschalten kann man diese tolle Delphi-Funktion wohl nicht. Aber vielleicht hat jemand noch eine andere Idee, wie ich meine Ressourcen verwalten kann.

mirage228 11. Jan 2005 05:55

Re: Lebenszeit-Kontrolle bei COM-Interfaces
 
Hi,

vielleicht unterlässt Delphi die COM Verwaltung ja, wenn Du für die Compiler-Optimierung für die entsprechende Methode deaktiverst....

mfG
mirage228

maximov 11. Jan 2005 12:29

Re: Lebenszeit-Kontrolle bei COM-Interfaces
 
Zitat:

Zitat von mirage228
Hi,

vielleicht unterlässt Delphi die COM Verwaltung ja, wenn Du für die Compiler-Optimierung für die entsprechende Methode deaktiverst....

mfG
mirage228

Kurz: Nein. COM ist keine Optimierung, sondern ein Feature.

@oxmyx: Warum vertraust du nicht der internen COM Referenz-zahler, hört sich so an, als ob du auch nix besseres vorhast. Ich hab es immer so gemacht, das ich um das Textur-interface noch ein objekt geschachtelt (mit infos über datei lade-zustand etc.) und dieses objekt dann in der engine refennziert. Dann kannst du auch die _addref und _release methoden selbst implementieren (was nicht unbedingt zu empfehlen ist).

Am besten TInterfaceList verwenden und const-parameter benutzen, dann läuft das mit den refernzen problemlos.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 Uhr.

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