No se puede activar la incrustación de Excel cuando se instala el complemento de código administrado

Síntomas

Después correctamente al insertar un objeto OLE de Microsoft Excel en el documento de otro programa, puede recibir errores que el servidor no está disponible o el almacenamiento de información está dañado al intentar abrir o editar de nuevo el objeto OLE. El mensaje de error exacto puede variar, ya que se genera por la aplicación que aloja la incrustación y no por Excel. En algunos casos, el cierre de mayo la aplicación host o bloqueo tras el error. Por ejemplo, Microsoft Word, puede bloquearse si se produce el error en un intento de modificar y luego intentar modificar el objeto de nuevo tras el error.

Este problema se produce cuando se cumplen las condiciones siguientes:
  • Un complemento de COM administrado (. NET) o un proyecto de Visual Studio Tools para Office Second Edition (VSTO SE) Addin, se registra para cargar en el inicio de Excel.
  • El complemento de código administrado se codifica para recibir eventos del objeto Application mediante el ensamblado de interoperabilidad primario (PIA) para Excel, o un ensamblado de interoperabilidad personalizado (IA) que utiliza managed delegados.
  • El objeto OLE que está editando ha sido cargado y activado al menos una vez antes correctamente. Las activaciones posteriores del mismo objeto son los que suelen encuentran el error.

Causa

El problema es causado por el número de referencia artificial en el objeto OLE mantenido por el complemento administrado. Este contador de referencias se produce porque muchos de los eventos del objeto Application pasan objetos de libro o ventana como parámetros. Estos eventos desencadena para incrustado OLE libros de la misma como no OLE incrustados libros. Al utilizar el PIA o un IA estándar para recibir eventos, estas llamadas se ajustan automáticamente por el CLR, y los objetos son contada de referencia. Dado que CLR utiliza la recogida de basura (GC), estas referencias no se liberan cuando devuelve el evento. Podrán destinarse a varios minutos o varias horas dependiendo de cuándo y cómo el GC obtiene finalmente para liberarlos. Debido a la cuenta de referencias adicionales, el objeto OLE se cierra nunca correctamente después de la primera edición. Por lo tanto, cuando se intenta editar el objeto OLE de otra vez, no podrá modificarla porque el objeto ya está abierto y su almacenamiento de información está bloqueada y no se puede volver a leer.

Solución

El desarrollador del complemento debe tener en cuenta los contadores de referencias para los eventos. Por lo que debe desarrollar addins que requieren receptores de sucesos para utilizar un punto de conexión directa al objeto Application en lugar de eventos administrados (delegados). Además, el complemento debe liberar explícitamente las referencias COM a parámetros que se pasan a estos eventos si detectan que el objeto es un embeddeding.

Estado

Microsoft Excel se implementa para seguir las reglas de OLE, que requerirán la versión determinista de sus objetos OLE para cerrar correctamente esos objetos cuando lo solicita el host OLE. Este comportamiento es por diseño. Las versiones actuales de en tiempo de ejecución de idioma común (CLR) no admiten OLE y utiliza una rutina de limpieza no determinista (el subproceso de prioridad baja GC) para liberar las referencias COM en los objetos OLE que pasó el complemento administrado. Este comportamiento es por diseño. Porque estos dos diseños están en conflicto, el problema puede producirse si el complemento introduce código administrado en Excel. Desarrolladores de complementos, por lo tanto, son responsables de analizar esta limitación y generar su addin para liberar explícitamente COM referencias si el receptor de eventos de aplicación.

Más información

Deben tener en cuenta los desarrolladores que escriben un complemento administrado para Excel
Propiedades

Id. de artículo: 944839 - Última revisión: 14 ene. 2017 - Revisión: 1

Comentarios