2011-01-25 26 views
8

¿Existe una buena referencia autoritativa exhaustiva que discuta la interoperabilidad entre procesos de 32 bits y de 64 bits? Basado en google deduje que:Interoperabilidad de 32 y 64 bits en Windows de 64 bits

  1. Una DLL de 32 bits solo puede residir en un proceso de 32 bits, y una DLL de 64 bits solo en un proceso de 64 bits.
  2. Los procesos de 32 y 64 bits solo pueden comunicarse utilizando sistemas de mensajes acoplados débilmente, como las comunicaciones de red, lo que significa que pueden comunicarse mediante COM/DCOM.
  3. Los componentes COM de 32 y 64 bits tienen entradas de registro diferentes. Normalmente, un componente solo se registra en uno de los dos y, por lo general, solo se ve en uno de los dos mundos.
  4. Un proceso de 32 bits solo puede crear algo registrado como un componente COM de 64 bits si usa CoCreateInstance con el indicador de invocación de 64 bits o (y supongo que sí, ¿es posible?) Si el 64 -bit componente está de alguna manera registrado en el registro de 32 bits pero bajo el capó todavía se crea como un proceso fuera de proceso de 64 bits, o si hay un componente COM de shell de 32 bits que crea el componente de 64 bits y luego redirige lo llama?

Esto sugiere que: 1. Una aplicación de 32 bits no puede utilizar GetObject para hacerse con una versión de 64 bits de Excel que está ejecutando? O puede? ¿Cómo se ve afectada la tabla de objetos en ejecución (ROT) por un problema de 32 contra 64 bits? ¿Puede un proceso de 32 bits crear una instancia de Excel si solo está instalada una versión de Office de 64 bits? Creo que la respuesta sería "no" a menos que el proceso de 32 bits use el indicador de 64 bits en su llamada CoCreateInstance, o si Excel también se registró de alguna manera en el mundo de 32 bits.

¿Hace Microsoft algo automáticamente como tener CoCreateInstance de un proceso de 32 bits revisar el registro de 64 bits e intentar crear un componente fuera de proceso de 64 bits si no hay ninguno registrado en el registro de 32 bits? He visto algunas notas de la versión de Office de 64 bits donde Microsoft advierte sobre el acceso desde aplicaciones de 32 bits a Excel de 64 bits que no funciona, pero conozco una instancia en la que parecía funcionar.

¿Existe una buena referencia técnica para esto?

Respuesta

5

Se explica bastante bien en el MSDN Library docs para CLSCTX. Un montón de reglas, el comportamiento por defecto es:

Si ni el cliente ni el servidor especifica una preferencia, entonces:

  • Si el ordenador que aloja el servidor ejecuta Windows XP o de Windows Servidor 2003 sin servicio Paquete 1 (SP1) o posterior instalado, luego COM preferirá una versión de 64 bits de el servidor si está disponible; de lo contrario, activará una versión de 32 bits del servidor .

  • Si el ordenador que aloja el servidor ejecuta Windows Server 2003 instalado con SP1 o posterior, COM trata de hacer coincidir la arquitectura del servidor al cliente arquitectura. En otras palabras, para un cliente de 32 bits, COM activará un servidor de 32 bits, si está disponible; de lo contrario, activará una versión de 64 bits de del servidor.Para un cliente de 64 bits, COM activará un servidor de 64 bits si está disponible ; de lo contrario, activará un servidor de 32 bits.

Comprobar el artículo de MSDN si desea anular este comportamiento.

+0

Gracias, subestimé esa sección de MSDN. ¿Por qué este artículo http://www.dnjonline.com/article.aspx?id=jun07_access3264 crea un contenedor COM de 64 bits que simplemente interactúa con el COM de 32 bits? Eso debería ser innecesario, ya que tener solo el componente COM de 32 bits, debería ser igualmente utilizable tanto en mundos de 32 como de 64 bits, suponiendo un ordenamiento adecuado de las funciones y demás. También consulte http://blogs.technet.com/b/office2010/archive/2010/02/23/understanding-64-bit-office.aspx, en la parte inferior "lo que debe saber" que advierte sobre las incompatibilidades. ¿Por qué? –

+0

El artículo de DDJ se centra en hacer que los servidores COM de 32 bits funcionen en un proceso de 64 bits, el contenedor tiene que ser de 64 bits. El artículo de Office advierte sobre incompatibilidades para * servidores COM * en proceso. Solo los servidores fuera de proceso pueden cerrar la brecha. –

+2

El primer artículo en el primer comentario se ha movido a http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/ – AndrewS

Cuestiones relacionadas