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.941 Themen, 20.715 Beiträge
das com objekt wird dann freigegeben, wenn der reference count auf null zurueckgegangen ist, und die com library somit keine weiteren referenzen mehr sieht. nachdem man vom eigenen programm aus nicht sehen kann wer da wo sonstnoch das objekt benutzt muss man sich nur um den eigenen referenz-count bemuehen: der rest ist aufgabe von com. m.a.w.: du musst nur deine eigenen referenzen frei geben: das bedeutet aber nicht automatisch, das das objekt nicht mehr von sonstwo referenziert und freigegeben wird.
WM_HOPETHISHELPS
thomas woelfer
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