Einzelnen Beitrag anzeigen

Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#1

Lebenszeit-Kontrolle bei COM-Interfaces

  Alt 11. Jan 2005, 00:45
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.
  Mit Zitat antworten Zitat