Pregunta Llamar a un ensamblaje x64 a través de COM desde una aplicación de 32 bits


Pregunta breve: ¿es posible (en un sistema operativo x64, por supuesto)? Si no, ¿por qué exactamente?

Desarrollé un dll plugin c # para excel 32.

Cuando se compila en x86 funciona bien.

Cuando se compila en x64, la llamada COM falla.

¿Necesito una versión de Excel de 64 bits?

Pensé que COM era agnóstico de compilar arquitectura e hizo posible la comunicación entre dlls desarrollados en diferentes tecnologías y con diferentes arquitecturas, pero supongo que esto último es incorrecto.

Supongo que un dll x64 bit obviamente no se puede llamar a través de COM (o más) desde una aplicación de 32 bits.


5
2017-11-19 11:51


origen


Respuestas:


COM admite dos tipos de servidores, en proceso y fuera de proceso. Las extensiones de Office son componentes en proceso, una DLL que se carga en el proceso. Una regla difícil para los procesos de 32 bits es que no pueden cargar archivos DLL de 64 bits. Y a la inversa. Esto se aplica por el registro en sí, un proceso de 32 bits no puede acceder directamente a la información de registro para los servidores COM de 64 bits. Se redirigen a las claves HKLM / Software / Wow6432Node. O en otras palabras, no pueden ni siquiera ver Componentes del bitness incorrecto.

Los componentes fuera de proceso no tienen esa restricción, se ejecutan en su propio proceso. COM calcula las llamadas entre los dos procesos mediante RPC y documentos sobre la diferencia de bitness. Esta es también una forma de hacer que un servidor de 64 bits en proceso funcione con un host de 32 bits, puede ejecutar el componente en un proceso de sustitución. Esto es difícil de poner en marcha y casi nunca vale la pena la molestia, las llamadas fuera de proceso son mucho más caras que las llamadas en proceso debido a la clasificación necesaria y el cambio de contexto. No solo es un poco más caro, es unas 10.000 veces más lento, sobre todo porque una llamada a una función en proceso es muy rápida. Solo se utiliza para mantener un servidor heredado de 32 bits trabajando con un programa de 64 bits. Mira COM + hosting si quieres probar esto, no sé mucho al respecto.


9
2017-11-19 13:15