AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Lebenszeit-Kontrolle bei COM-Interfaces
Thema durchsuchen
Ansicht
Themen-Optionen

Lebenszeit-Kontrolle bei COM-Interfaces

Ein Thema von Oxmyx · begonnen am 11. Jan 2005 · letzter Beitrag vom 11. Jan 2005
Antwort Antwort
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
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Lebenszeit-Kontrolle bei COM-Interfaces

  Alt 11. Jan 2005, 05:55
Hi,

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

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Lebenszeit-Kontrolle bei COM-Interfaces

  Alt 11. Jan 2005, 12:29
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.
mâxîmôv.

{KDT}
  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 05:16 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