COM Objekt released, aber...

jccTeq

Erfahrenes Mitglied
Ich arbeite in einem meiner Programme mit einem COM-Interface, über das ich mit einem anderen Programm kommuniziere (InProc-Server). Das Problem ist folgendes:

ich gebe das COM Objekt per ReleaseComObject wieder frei, versichere mich, daß der Rückgabewert (also der Referenzcounter) = 0 ist und setze das Objekt auf null. Jetzt sollte sich die Applikation des InProc-Servers doch eigentlich beenden lassen. Geht aber nicht. Wenn ich die Applikation danach auf normalem Wege beende, schließt sich zwar das Fenster, jedoch bleibt die Instanz trotzdem noch im Speicher.

Die Applikation, die ich aus meinem Programm per COM steuere, ist ebenfalls eine Eigenentwicklung aus unserem Team.

Was ist nun wahrscheinlicher? Daß mein Programm die Beendigung verhindert, oder daß im COM-Server ein Problem ist, der dazu führt, daß die Applikation nicht beendet werden kann?
 
Hi.
Hast du vielleicht in deinem Objekt eine Referenz auf ein anderes Objekt, welches widerrum eine Referenz auf das erste Objekt hat? Da könnte es zb mit Probleme geben, dass er sich nicht aus dem Speicher räumen lässt.
 
NRFi hat gesagt.:
Vielleicht noch einbisschen mehr mit GC hantieren? Collect usw..

Laut Spezifikation soll man den GC gänzlich in Ruhe seine Arbeit tätigen lassen.


Hi.
Hast du vielleicht in deinem Objekt eine Referenz auf ein anderes Objekt, welches widerrum eine Referenz auf das erste Objekt hat? Da könnte es zb mit Probleme geben, dass er sich nicht aus dem Speicher räumen lässt.

Liefert mir ReleaseComObject aus dem Marshal Namespace nicht den neuen Referenzcounter nach dem Dekrementieren zurück? Der steht dann auf 0, wie's ja sein sollte. Daher gehe ich davon aus, daß keine Referenzen mehr auf das Objekt verweisen. In meinem Programm gibt es da ohnehin nur eine einzige, und die wird definitiv released.

Trotzdem lässt sich die gesteuerte Applikation nicht schließen und stürzt ab, sobald mein Programm beendet wird.
 
Zurück