Interoperabilitas 32-bit dan 64-bit

Aplikasi teknologi bantuan perlu berkomunikasi di seluruh batas proses untuk mendapatkan informasi UI dari server Aksesibilitas Aktif Microsoft dan penyedia Microsoft UI Automation. Topik ini menjelaskan masalah komunikasi antarproses utama yang perlu Anda ingat saat mengembangkan aplikasi aksesibilitas Windows.

Saat aplikasi menggunakan Windows Automation API, komponen run-time Microsoft Active Accessibility dan UI Automation secara otomatis menangani semua masalah dan kompleksitas yang terlibat dalam melakukan komunikasi antarproses (IPC), termasuk masalah interoperabilitas yang terlibat ketika satu proses adalah 32-bit dan yang lainnya adalah 64-bit. Microsoft menyadari bahwa ada kalanya aplikasi teknologi bantuan mungkin perlu menggunakan beberapa bentuk IPC alih-alih Windows Automation API untuk berkomunikasi dengan server Aksesibilitas Aktif Microsoft atau penyedia Otomatisasi UI. Pada kesempatan ini, Microsoft menyarankan agar Anda menggunakan pesan DCOM atau Windows (yang memiliki nilai kurang dari WM_USER) untuk berkomunikasi dengan proses lain. Seperti Windows Automation API, pesan DCOM dan Windows secara otomatis menangani semua masalah IPC untuk Anda, termasuk interoperabilitas 32-bit hingga 64-bit.

Ketika pesan Windows Automation API, DCOM, dan Windows bukan pilihan, ingatlah masalah berikut saat menerapkan metode IPC yang Anda pilih:

  • Memori Bersama—Saat menggunakan memori bersama, ketahuilah bahwa struktur dalam proses 32-bit mungkin memiliki ukuran dan tata letak yang berbeda dari struktur yang sama dalam proses 64-bit. Ini terutama berlaku untuk struktur yang berisi pointer atau handel.
  • Pemotongan Pointer—Meskipun aplikasi 32-bit dapat menggunakan jenis data LONGLONG untuk menyimpan nilai 64-bit, ada instans di mana tidak ada elemen Windows API yang akan memungkinkan aplikasi 32-bit menerima nilai 64-bit dari proses 64-bit, atau untuk mengirim nilai 64-bit ke proses 64-bit. Misalnya, fungsi GetWindowLongPtr dan SendMessage memotong semua nilai pointer, meninggalkan aplikasi 32-bit dengan nilai yang tidak berguna.
  • Handel—Karena handel kernel32 dan user32 hanya signifikan 32-bit dalam proses 32-bit dan 64-bit, mereka dapat ditransfer antar proses tanpa masalah. Namun, beberapa item yang didefinisikan Windows sebagai handel benar-benar hanya membungkus pointer (misalnya, HTREEITEM). "Handel" ini akan dipotong jika diteruskan dari proses 64-bit ke proses 32-bit.
  • WinEvent Hook Functions—Untuk mendaftarkan fungsi kait dalam konteks dengan proses server 32-bit, fungsi hook harus berada di DLL 32-bit. Demikian pula, untuk mendaftarkan fungsi kait dalam konteks dengan proses server 64-bit, fungsi kait harus berada di DLL 64-bit. Jika aplikasi teknologi bantuan mencoba mendaftarkan fungsi kait dalam konteks dengan server yang memiliki kedalaman bit yang berbeda, peristiwa akan tetap dikirimkan ke fungsi kait, tetapi akan dikirimkan di luar konteks. Untuk informasi selengkapnya, lihat Fungsi Hook WinEvents dan In-Context dan Out-of-Context.

Untuk informasi selengkapnya tentang interoperabilitas 32-bit dan 64-bit, lihat Interoperabilitas Proses.

Gambaran Umum WINDOWS Automation API