Compartilhar via


Interoperabilidade de 32 bits e 64 bits

Os aplicativos de tecnologia adaptativa precisam se comunicar entre os limites do processo para obter informações da interface do usuário de servidores de Acessibilidade Ativa da Microsoft e provedores de Automação de Interface do Usuário da Microsoft. Este tópico descreve os principais 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 de tempo de execução da Automação de Interface do Usuário e Acessibilidade Ativa da Microsoft 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 um provedor de Automação de Interface do Usuário. Nessas ocasiões, a Microsoft recomenda que você use mensagens DCOM ou Windows (aquelas com valores menores que os de WM_USER) para se comunicar com outros processos. Assim como a API de Automação do Windows, as mensagens 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 os seguintes problemas em mente 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 as alças kernel32 e user32 são apenas significativas de 32 bits em processos de 32 bits e 64 bits, elas podem ser transferidas entre processos sem problemas. No entanto, alguns itens que o Windows define como identificadores são realmente 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 Hook Functions — para registrar uma função de gancho no contexto com um processo de servidor de 32 bits, a função de gancho 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 de gancho 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 de gancho, mas serão entregues fora de contexto. Para obter mais informações, consulte WinEvents e In-Context e funções de gancho fora de contexto.

Para obter mais informações sobre a interoperabilidade de 32 bits e 64 bits, consulte de Interoperabilidade do Processo.

Visão geral da API de Automação do Windows