Interoperabilidade de 32 bits e 64 bits
Os aplicativos de tecnologia adaptativa precisam se comunicar entre os limites do processo para obter informações de interface do usuário de servidores de Acessibilidade Ativa da Microsoft e provedores do Microsoft Automação da Interface do Usuário. Este tópico descreve os main problemas de comunicação entre processos que você precisa ter em mente ao desenvolver aplicativos de acessibilidade do Windows.
Quando os aplicativos usam a API de Automação do Windows, os componentes microsoft Active Accessibility e Automação da Interface do Usuário tempo de execução lidam automaticamente com todos os problemas e complexidades envolvidos na execução de IPC (comunicações entre processos), incluindo os problemas de interoperabilidade envolvidos quando um processo é de 32 bits e o outro é de 64 bits. A Microsoft reconhece que há ocasiões em que um aplicativo de tecnologia adaptativa pode precisar usar alguma forma de IPC em vez da API de Automação do Windows para se comunicar com um servidor de Acessibilidade Ativa da Microsoft ou com um provedor de Automação da Interface do Usuário. Nessas ocasiões, a Microsoft recomenda que você use mensagens DCOM ou Windows (aquelas com valores menores que o de WM_USER) para se comunicar com outros processos. Assim como as mensagens da API de Automação do Windows, DCOM e Windows lidam automaticamente com todos os problemas de IPC para você, incluindo interoperabilidade de 32 bits a 64 bits.
Quando a API de Automação do Windows, o DCOM e as mensagens do Windows não forem uma opção, tenha em mente os seguintes problemas ao implementar o método IPC escolhido:
- Memória compartilhada — Ao usar memória compartilhada, lembre-se de que uma estrutura em um processo de 32 bits pode ter um tamanho e layout diferentes da mesma estrutura em um processo de 64 bits. Isso é especialmente verdadeiro para estruturas que contêm ponteiros ou identificadores.
- Truncamento de ponteiro — Embora um aplicativo de 32 bits possa usar o tipo de dados LONGLONG para armazenar um valor de 64 bits, há instâncias em que não existe nenhum elemento da API do Windows que permitiria que o aplicativo de 32 bits recebesse um valor de 64 bits de um processo de 64 bits ou enviasse um valor de 64 bits para um processo de 64 bits. Por exemplo, as funções GetWindowLongPtr e SendMessage truncam todos os valores de ponteiro, deixando o aplicativo de 32 bits com um valor inútil.
- Identificadores — como os identificadores kernel32 e user32 são apenas 32 bits significativos em processos de 32 bits e 64 bits, eles podem ser transferidos entre processos sem problemas. No entanto, alguns itens que o Windows define como identificadores são apenas ponteiros encapsulados (por exemplo, HTREEITEM). Esses "identificadores" serão truncados se forem passados de um processo de 64 bits para um processo de 32 bits.
- Winevent Funções de gancho – para registrar uma função de gancho no contexto com um processo de servidor de 32 bits, a função hook deve residir em uma DLL de 32 bits. Da mesma forma, para registrar uma função de gancho no contexto com um processo de servidor de 64 bits, a função hook deve residir em uma DLL de 64 bits. Se um aplicativo de tecnologia adaptativa tentar registrar uma função de gancho no contexto com um servidor que tenha uma profundidade de bit diferente, os eventos ainda serão entregues à função gancho, mas serão entregues fora de contexto. Para obter mais informações, consulte WinEvents e Funções de gancho no contexto e fora de contexto.
Para obter mais informações sobre a interoperabilidade de 32 bits e 64 bits, consulte Interoperabilidade do processo.
Tópicos relacionados