Ich schreibe grade an einer Dx Anwendung. Beim Beenden der Anwendung werden schön sauber die objekte "Release()"-t. Release gibt immer die anzahl der noch offenen Referenzen zurück.
Und die ist nur beim Direct3D objekt nicht 0. Wenn ich dann einfach auf blöd solange Release wie nicht 0 zurückgegeben wird, ist alles zu spät: Das Härteste war ein Bluescreen "Das Betriebssystem wird gestoppt. Starten sie den Rechner neu."
Seltsamerweise funktioniert das Programmende mit verbleibenden Referern sauber.
Wann wird den ein COM objekt wirklich freigegeben? wenn keine Referer übrig sind, oder?
Kann man irgendwie die Typen der Refernzierenden objekte bestimmen?
Viel Text, ich weiß! Danke fürs lesen und antworten!
Dreamforger
Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge
Danke für die Antwort.
Ich konnte das Problem einkreisen:
Beim Aufruf von QueryInterface eines bestehenden COM objects 'erbt' das neue object anscheinend den RefCount des Bestehenden. Warum auch immer. Auf jeden Fall referenziert das alte object das neue und umgekehrt was zu einer unnötigen Erhöhung des Refcount führt...
Ich rufe jetzt gleich nach QueryInterface ein Release des neuen objects auf. Das zerstört (unsinnigerweise) das neue object nicht, korrigiert aber den überzogenen RefCount...
War nur durch eigenes Mitzählen rauszufinden, danke für den Tip
Dreamforger