¿Por qué no se puede usar el objeto COM IDisposable en sus envolturas de LLR Callable Wrappers?¿Por qué no se puede usar el objeto COM IDisposable?
Respuesta
Es de suponer que una implementación de este tipo IDisposable
llamaría Marshal.ReleaseComObject.
Existen casos en los que llamar a Marshal.ReleaseComObject es una buena idea, por ejemplo to get an Office application to quit after automation from a .NET client.
Pero como indica la documentación para Marshal.ReleaseComObject
, no debe usarse en el caso general, y probablemente no en absoluto para los objetos COM en proc. Here's a blog post with some more detailed info.
Por lo tanto, no habría sido una buena idea alentar a las personas a usarlo llamándolo desde una implementación IDisposable
en el RCW.
Sin embargo, lo interesante es que el método de Silverlight 4 AutomationFactory.CreateObject
hace devolver un objeto dinámico que es IDisposable
. Y las pruebas parecen mostrar que this does in fact release the COM reference, aunque la documentación es un poco escasa.
err ... ¿no se trata de CCW? Tu respuesta es sobre RCW. – Aamir
@Joe: ¿por qué no es una excelente idea simplemente llamar a [Marshal.AddRef] (http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.addref.aspx) si ¿Deseaban el objeto COM quedarse? ¿Perdemos recursos de manera predeterminada? Esto es totalmente contrario a la idea de la recolección de basura y el conteo de referencias. Siento que me falta algo aquí – sehe
- 1. El objeto COM que se ha separado de su RCW subyacente no se puede usar, ¿por qué ocurre?
- 2. El objeto COM que se ha separado de su RCW subyacente no se puede usar
- 3. ¿Qué causa la excepción InvalidComObjectException: "No se puede usar el objeto COM que se ha separado de su RCW subyacente"?
- 4. No se puede convertir objeto COM del tipo de excepción
- 5. No se puede convertir objeto COM - Microsoft Outlook & C#
- 6. No se puede convertir objeto COM de 'Sistema tipo .__ ComObject
- 7. ¿Por qué no Thread implement IDisposable?
- 8. ¿Por qué no podemos usar "herencia virtual" en COM?
- 9. ¿Por qué no se puede serializar todo tipo de objeto?
- 10. ¿Por qué mi objeto .Net no se puede serializar?
- 11. "El objeto COM que se ha separado de su RCW subyacente no se puede usar" con .NET 4.0
- 12. ¿Por qué Enumerable.Range Implement IDisposable?
- 13. ¿Por qué no se puede usar this.type para nuevas instancias?
- 14. ¿Por qué la unión no se puede usar en Herencia?
- 15. ¿Por qué se puede modificar el objeto final?
- 16. ¿Por qué "no se puede usar un objeto como parámetro de un método"?
- 17. ¿Por qué java.lang.Void no se puede serializar?
- 18. No se puede crear el objeto CLLocation
- 19. ¿Por qué el objeto istream se puede usar como una expresión bool?
- 20. ¿Por qué no se puede configurar un objeto desde la interoperabilidad de Excel?
- 21. ¿Por qué no se puede clonar IEnumerator?
- 22. El objeto 'Administrador' no se puede llamar
- 23. No se puede convertir el objeto COM del tipo 'System .__ ComObject' al tipo de interfaz 'Microsoft.VisualStudio.OLE.Interop.IServiceProvider'
- 24. El objeto 'unicode' no se puede llamar
- 25. Tipo de lanzamiento a IDisposable - ¿Por qué?
- 26. ¿Por qué no se puede usar una función no miembro para sobrecargar el operador de asignación?
- 27. ¿por qué se niega el acceso al puerto com?
- 28. ¿Por qué debería aprender COM?
- 29. ¿por qué jspService() no se puede anular?
- 30. ¿Por qué no se puede publicar?
no está seguro de qué quiere decir exactamente ... Los objetos COM son muy complicados y la implementación IDisposable dependerá de varios aspectos, incluido el uso del objeto COM ... ¿cómo podría el marco implementar/hacer esto automágicamente? – Yahia
¿Qué lograría eso exactamente? vea la respuesta de Joe y los enlaces en esa respuesta, por favor ... – Yahia
Lo ideal sería llamar a Marshal.FinalReleaseComObject para que no tenga que hacerlo en un bloque finally. –