Hasta hace poco, creía que el tiempo de ejecución de .NET solo aumenta el recuento de referencias de los objetos COM en 1 al crear un runtime-callable wrapper, y que solo se crea uno de estos wrapper invocables en tiempo de ejecución para cualquier objeto COM dado.¿Cuándo el tiempo de ejecución de .NET contiene un recuento de referencia> 1 para objetos COM?
Si no me equivoco, lo anterior implica que Marshal.FinalReleaseComObject y Marshal.ReleaseComObject hacen lo mismo en la práctica.
Sin embargo, hoy estaba escribiendo algunas pruebas para verificar que los objetos COM salgan correctamente de mi código. Lo hago invocando el objeto supuestamente liberado y comprobando el esperado InvalidComObjectException
. Resulta que hay casos en los que se lanza la excepción después de FinalReleaseComObject
, pero no después de ReleaseComObject
.
¿Significa esto que el tiempo de ejecución de .NET 2.0 puede contener más de una referencia a un objeto COM? Si es así, ¿cuándo hace esto?