Bis vor kurzem glaubte ich, dass die .NET-Laufzeit nur die Referenzanzahl von COM-Objekten um 1 erhöht, wenn eine runtime-callable wrapper erstellt, und dass nur ein solcher Laufzeitaufruf Wrapper für ein bestimmtes COM-Objekt erstellt wird.Wann enthält die .NET-Laufzeit einen Referenzzähler> 1 für COM-Objekte?
Wenn ich mich nicht irre, impliziert das obige, dass Marshal.FinalReleaseComObject und Marshal.ReleaseComObject in der Praxis dasselbe tun.
Allerdings schrieb ich heute einige Tests, um zu überprüfen, dass COM-Objekte ordnungsgemäß von meinem Code freigegeben werden. Ich mache das, indem ich das vermeintlich freigegebene Objekt anrufe und auf die erwarteten InvalidComObjectException
überprüfe. Es stellt sich heraus, dass es Fälle gibt, in denen die Ausnahme nach einer FinalReleaseComObject
ausgelöst wird, aber nicht nach einer ReleaseComObject
.
Bedeutet dies, dass die .NET 2.0-Laufzeit mehr als einen Verweis auf ein COM-Objekt enthalten kann? Wenn ja, wann tut es das?