Interoperabilità a 32 bit e a 64 bit

Le applicazioni di tecnologia assistive devono comunicare tra i limiti del processo per ottenere informazioni sull'interfaccia utente dai server di accessibilità Microsoft e dai provider di Automazione interfaccia utente Microsoft. Questo argomento descrive i principali problemi di comunicazione tra processi da tenere presente durante lo sviluppo di applicazioni di accessibilità di Windows.

Quando le applicazioni usano l'API di Automazione di Windows, i componenti di accessibilità e Automazione interfaccia utente di runtime gestiscono automaticamente tutti i problemi e le complessità coinvolti nell'esecuzione di comunicazioni tra processi (IPC), inclusi i problemi di interoperabilità coinvolti quando un processo è a 32 bit e l'altro è a 64 bit. Microsoft riconosce che ci sono occasioni in cui un'applicazione di tecnologia assistive potrebbe dover usare una forma di IPC anziché l'API di Automazione di Windows per comunicare con un server di accessibilità microsoft o un provider di Automazione interfaccia utente. In queste occasioni, Microsoft consiglia di usare i messaggi DCOM o Windows (quelli con valori inferiori a quelli di WM_USER) per comunicare con altri processi. Come l'API di Automazione di Windows, i messaggi DCOM e Windows gestiscono automaticamente tutti i problemi IPC, inclusi l'interoperabilità a 32 bit a 64 bit.

Quando l'API di Automazione di Windows, DCOM e i messaggi di Windows non sono un'opzione, tenere presenti i problemi seguenti quando si implementa il metodo IPC scelto:

  • Memoria condivisa: quando si usa la memoria condivisa, tenere presente che una struttura in un processo a 32 bit potrebbe avere dimensioni e layout diversi rispetto alla stessa struttura in un processo a 64 bit. Questo è particolarmente vero per le strutture che contengono puntatori o handle.
  • Troncamento puntatore: anche se un'applicazione a 32 bit può usare il tipo di dati LONGLONG per archiviare un valore a 64 bit, esistono istanze in cui non esiste alcun elemento API di Windows che consente all'applicazione a 32 bit di ricevere un valore a 64 bit da un processo a 64 bit o di inviare un valore a 64 bit a un processo a 64 bit. Ad esempio, le funzioni GetWindowLongPtr e SendMessage troncano tutti i valori del puntatore, lasciando l'applicazione a 32 bit con un valore inutile.
  • Handle: poiché i handle kernel32 e user32 sono significativi solo a 32 bit nei processi a 32 bit e a 64 bit, possono essere trasferiti tra processi senza problemi. Tuttavia, alcuni elementi che Windows definisce come handle sono davvero solo puntatori wrapped (ad esempio , HTREEITEM). Questi "handle" verranno troncati se vengono passati da un processo a 64 bit a un processo a 32 bit.
  • WinEvent Funzioni di hook: per registrare una funzione di hook in contesto con un processo server a 32 bit, la funzione hook deve risiedere in una DLL a 32 bit. Analogamente, per registrare una funzione di hook in contesto con un processo server a 64 bit, la funzione hook deve risiedere in una DLL a 64 bit. Se un'applicazione di tecnologia assistive tenta di registrare una funzione di hook nel contesto con un server con profondità di bit diversa, gli eventi verranno comunque recapitati alla funzione hook, ma verranno recapitati fuori contesto. Per altre informazioni, vedere Funzioni WinEvents e In-Context e Out-of-Context Hook.

Per altre informazioni sull'interoperabilità a 32 bit e a 64 bit, vedere Interoperabilità dei processi.

Panoramica dell'API di Automazione di Windows