Tengo un objeto COM de terceros (32 bit) que necesito llamar desde mi aplicación C# (64 bit). Sé que tengo que ejecutar el objeto COM en un proceso separado. Este objeto COM tiene muchas clases implementadas en él, así que estoy tratando de evitar escribir mi propia envoltura remota que expone todos los métodos. COM + parece ser la solución más directa. Abrí el menú de Servicios de componentes, creé una nueva aplicación COM +, agregué mi objeto COM como componente a esta aplicación. Todo parecía importar maravillosamente.Llamando COM de 32 bits desde C# ejecutándose en modo de 64 bits
En mi aplicación C#, agregué el objeto COM original como referencia (que genera automáticamente la biblioteca de tipos). Utilizando la referencia de biblioteca de tipo, puedo crear objetos a partir del componente COM + (los veo comenzar a girar en la ventana de Servicios de componentes), pero cuando intento acceder a los métodos del objeto, aparece un error al decir que la interfaz no está registrado
¿Alguien tiene una pista? Volví y ejecuté regsvr32 en el objeto COM, pero no creo que fuera necesario, y no ayudó. ¿Mi uso en C# es correcto? La autocompleta VS2008 no tuvo problemas para ver esos métodos.
La excepción exacta es: "Interfaz no registrada (Excepción de HRESULT: 0x80040155)"
poco claro sobre exactamente cuáles son las funciones y los permisos están a punto de los Servicios de componentes, he intentado establecer la identidad de objeto COM + a ejecutarse bajo la cuenta del sistema, como servicio local y como usuario interactivo. He agregado a Todos como usuario en las Roles. Todo se ejecuta localmente, por lo que no debería haber un problema con privilegios de archivos ni nada de eso.
También quiero reiterar que este objeto COM contiene muchas clases. Instalé exitosamente un objeto de clase en mi cliente y establecí algunos valores de propiedad. También ejecuté con éxito otro objeto de clase, pero recibí esta excepción al intentar llamar a un método de este segundo objeto .... así que no piensa hay un problema con el registro en el que está registrado mi objeto COM.
COM + es extremadamente dependiente de derechos/permisos, etc. quizás esto que está sucediendo ... – Yahia
Windows efectivamente tiene dos registros diferentes, uno para 32 y uno para 64 bit. Creo que la interfaz está registrada en una y luego en otra. – GSerg
GSerg es correcto. Si la aplicación que lo registra es de 32 bits, se ejecuta en un sistema de 64 bits, todas las entradas de registro terminan en el nodo duplicado WOW6432 en lugar de donde normalmente irían. –