El artículo de blog Mason Bendixen que Ilya cita es correcta: la RCW tiene como alcance el dominio de aplicación, no para el proceso. Solo puedo adivinar que el artículo Runtime Callable Wrapper (MSDN 2.0) estaba hablando "casualmente". Ese artículo no es necesariamente incorrecto en el sentido general, porque es más típico ejecutarlo usando solo un único dominio de aplicación, pero esa oración no es técnicamente precisa.
cuanto a su pregunta específica:.
"Me gustaría saber qué sucede si utilizo Marshal.ReleaseComObject (x) en un bucle hasta que sea cuenta llegue a 0 (como se recomienda ) Will libera referencias de otros complementos (ejecutándose en otro dominio de aplicación en el mismo proceso de Outlook) ?? "
La respuesta depende de cómo configure su complemento. En general, si no toma precauciones, la respuesta es sí, afectaría las referencias en otros complementos que operan desde dentro del mismo dominio de aplicación. Pero como dice que se está ejecutando desde un Dominio de aplicación diferente, entonces, no, no sería así.
Hay un COM Shim Wizard Version 2.3.1 que puede utilizar para aislar su complemento. La documentación para el Asistente COM Shim se puede encontrar aquí: Isolating Microsoft Office Extensions with the COM Shim Wizard Version 2.3.1.
El asistente COM Shim Wizard utiliza la reflexión para generar un cargador de interfaz de usuario COM personalizado que carga su ensamblaje de complemento dentro de un dominio de aplicación separado. Esto crea seguridad en dos aspectos:
(1) Al usar un punto de entrada COM personalizado e independiente, su complemento se identifica correctamente por separado por Microsoft Office del resto de complementos. De lo contrario, de manera predeterminada, todos los complementos comparten el mismo cargador predeterminado de mscoree.dll. El problema con compartir el mismo cargador es que si cualquier complemento tiene un bloqueo, entonces Microsoft Office identificará a mscoree.dll como el origen del problema y no lo cargará automáticamente la próxima vez. Puede volver a activarlo manualmente, pero su complemento no se cargará automáticamente la próxima vez debido a un problema en el complemento de otra persona.
(2) Al cargar su ensamblaje dentro de un Dominio de aplicaciones separado, los envoltorios de rmadores en tiempo de ejecución (RCW) están aislados de los otros complementos que se cargan en el mismo proceso. En este caso, si llama a Marshal.ReleaseComObject (object) o Marshal.FinalReleaseComObject (object), entonces no afectará a los complementos de nadie más. Lo que es más importante, si alguno de esos complementos realiza esas llamadas, su complemento estaría protegido contra daños. :-)
La desventaja de usar el COM Shim Wizard es que al operar fuera de un AppDomain separado hay una sobrecarga de clasificación adicional. No creo que esto deba ser notable para un complemento de Microsoft Outlook. Puede ser un factor, sin embargo, para algunas rutinas intensivas que tienen muchas llamadas al modelo de objetos, como a veces puede ser el caso de un complemento de Microsoft Excel.
Usted indicó que ya está ejecutando su complemento desde un dominio de aplicación diferente. Si esto es cierto, entonces ya está aislado de Marshal.ReleaseComObject (objeto) y Marshal.FinalReleaseComObject (objeto) llama con respecto a otros AppDomains. (Tengo curiosidad por saber cómo lo está haciendo, por cierto ... ¿Está creando explícitamente su propio AppDomain? La plantilla de complemento predeterminada en Visual Studio hace que no se ejecute en en un Dominio de aplicaciones separado y cargue con mscoree.dll .)
Si está creando su propio dominio de aplicación, su código está aislado, pero su identidad podría no estar separada de otros complementos, sin embargo, ya que su complemento aún estaría compartiendo el cargador mscoree.dll predeterminado, a menos que Usaste otros medios para solucionar esto.
espero que esto ayude ...
Si hacemos esta suposición, a continuación, pasa a la pregunta acerca de la definición de "instancia" - es decir, digamos cada mensaje es un objeto - significa que cada adición crea/utiliza diferentes COM (instancia) para acceder al mensaje, o hay un solo objeto COM (instancia) y todos están accediendo a él? –
Un objeto de mensaje expuesto por Outlook es probablemente compartido: una sola instancia. Sin embargo, cada dominio de aplicación tiene su propio puntero (RCW) para esta instancia, y mantiene su propio recuento de referencias internas (si Mason es correcto, y creo que lo es). –
Mason puede ser correcto para el momento del artículo, ya que 1.1 documentos no dicen "proceso", pero los documentos de los marcos 2.0 y posteriores dicen "por proceso", no por cada dominio de aplicación. –