Interoperabilidad de 32 y 64 bits
Las aplicaciones tecnológicas de asistencia deben comunicarse a través de los límites del proceso para obtener información de la interfaz de usuario de los servidores de accesibilidad activa de Microsoft y los proveedores de Microsoft Automatización de la interfaz de usuario. En este tema se describen los principales problemas de comunicación entre procesos que debe tener en cuenta al desarrollar aplicaciones de accesibilidad de Windows.
Cuando las aplicaciones usan la API de Automatización de Windows, microsoft Active Accessibility y Automatización de la interfaz de usuario componentes en tiempo de ejecución controlan automáticamente todos los problemas y complejidades implicados en la realización de comunicaciones entre procesos (IPC), incluidos los problemas de interoperabilidad implicados cuando un proceso es de 32 bits y el otro es de 64 bits. Microsoft reconoce que hay ocasiones en las que una aplicación de tecnología de asistencia puede necesitar usar algún tipo de IPC en lugar de la API de Automatización de Windows para comunicarse con un servidor de accesibilidad activo de Microsoft o con un proveedor de Automatización de la interfaz de usuario. En estas ocasiones, Microsoft recomienda usar mensajes DCOM o Windows (aquellos con valores inferiores a los de WM_USER) para comunicarse con otros procesos. Al igual que la API de Windows Automation, los mensajes DCOM y Windows controlan automáticamente todos los problemas de IPC, incluida la interoperabilidad de 32 bits a 64 bits.
Cuando los mensajes de la API de Windows Automation, DCOM y Windows no son una opción, tenga en cuenta los siguientes problemas al implementar el método IPC elegido:
- Memoria compartida: al usar memoria compartida, tenga en cuenta que una estructura de un proceso de 32 bits puede tener un tamaño y un diseño diferentes que la misma estructura en un proceso de 64 bits. Esto es especialmente cierto para las estructuras que contienen punteros o identificadores.
- Truncamiento de puntero: aunque una aplicación de 32 bits puede usar el tipo de datos LONGLONG para almacenar un valor de 64 bits, hay instancias en las que no existe ningún elemento de la API de Windows que permitiría que la aplicación de 32 bits reciba un valor de 64 bits de un proceso de 64 bits o enviar un valor de 64 bits a un proceso de 64 bits. Por ejemplo, las funciones GetWindowLongPtr y SendMessage truncan todos los valores de puntero, dejando la aplicación de 32 bits con un valor inútil.
- Identificadores: dado que los identificadores kernel32 y user32 solo son significativos de 32 bits en procesos de 32 y 64 bits, se pueden transferir entre procesos sin ningún problema. Sin embargo, algunos elementos que Windows define como identificadores son simplemente punteros ajustados (por ejemplo, HTREEITEM). Estos "identificadores" se truncarán si se pasan de un proceso de 64 bits a un proceso de 32 bits.
- WinEvent Funciones de enlace: para registrar una función de enlace en contexto con un proceso de servidor de 32 bits, la función de enlace debe residir en un archivo DLL de 32 bits. Del mismo modo, para registrar una función de enlace en contexto con un proceso de servidor de 64 bits, la función de enlace debe residir en un archivo DLL de 64 bits. Si una aplicación de tecnología de asistencia intenta registrar una función de enlace en contexto con un servidor que tiene una profundidad de bits diferente, los eventos se seguirán entregando a la función de enlace, pero se entregarán fuera del contexto. Para obtener más información, vea WinEvents and In-Context and Out-of-Context Hook Functions.
Para obtener más información sobre la interoperabilidad de 32 y 64 bits, consulte Interoperabilidad de procesos.
Temas relacionados