32비트 및 64비트 상호 운용성

보조 기술 애플리케이션은 Microsoft Active Accessibility 서버 및 Microsoft UI 자동화 공급자로부터 UI 정보를 가져오기 위해 프로세스 경계를 넘어 통신해야 합니다. 이 항목에서는 Windows 접근성 애플리케이션을 개발할 때 유의해야 하는 기본 상호 처리 통신 문제에 대해 설명합니다.

애플리케이션이 Windows Automation API를 사용하는 경우 Microsoft Active Accessibility 및 UI 자동화 런타임 구성 요소는 한 프로세스가 32비트이고 다른 프로세스가 64비트일 때 관련된 상호 운용성 문제를 포함하여 IPC(Interprocess Communications) 수행과 관련된 모든 문제와 복잡성을 자동으로 처리합니다. Microsoft는 보조 기술 애플리케이션이 Microsoft Active Accessibility 서버 또는 UI 자동화 공급자와 통신하기 위해 Windows Automation API 대신 일종의 IPC를 사용해야 하는 경우가 있음을 인식합니다. 이러한 경우 다른 프로세스와 통신하기 위해 DCOM 또는 Windows 메시지( 값이 WM_USER 미만인 메시지)를 사용하는 것이 좋습니다. Windows Automation API와 마찬가지로 DCOM 및 Windows 메시지는 32비트에서 64비트 상호 운용성을 포함하여 모든 IPC 문제를 자동으로 처리합니다.

Windows Automation API, DCOM 및 Windows 메시지가 옵션이 아닌 경우 선택한 IPC 메서드를 구현할 때 다음 문제를 염두에 두어야 합니다.

  • 공유 메모리 - 공유 메모리를 사용하는 경우 32비트 프로세스의 구조체가 64비트 프로세스의 동일한 구조와 다른 크기와 레이아웃을 가질 수 있다는 점에 유의하세요. 포인터 또는 핸들이 포함된 구조체의 경우 특히 그렇습니다.
  • 포인터 잘림 - 32비트 애플리케이션은 LONGLONG 데이터 형식을 사용하여 64비트 값을 저장할 수 있지만 32비트 애플리케이션이 64비트 프로세스에서 64비트 값을 받거나 64비트 프로세스에 64비트 값을 보낼 수 있는 Windows API 요소가 없는 인스턴스가 있습니다. 예를 들어 GetWindowLongPtrSendMessage 함수는 모든 포인터 값을 잘라내어 32비트 애플리케이션에 쓸모없는 값을 남깁니다.
  • 핸들 - kernel32 및 user32 핸들은 32비트 및 64비트 프로세스 모두에서 32비트만 중요하므로 문제 없이 프로세스 간에 전송할 수 있습니다. 그러나 Windows에서 핸들로 정의하는 일부 항목은 실제로 래핑된 포인터(예: HTREEITEM)입니다. 이러한 "핸들"은 64비트 프로세스에서 32비트 프로세스로 전달되는 경우 잘립니다.
  • WinEvent 후크 함수 - 컨텍스트 내 후크 함수를 32비트 서버 프로세스에 등록하려면 후크 함수가 32비트 DLL에 있어야 합니다. 마찬가지로 컨텍스트 내 후크 함수를 64비트 서버 프로세스에 등록하려면 후크 함수가 64비트 DLL에 있어야 합니다. 보조 기술 애플리케이션이 다른 비트 깊이의 서버에 컨텍스트 내 후크 함수를 등록하려고 하면 이벤트는 여전히 후크 함수로 전달되지만 컨텍스트 외부로 전달됩니다. 자세한 내용은 WinEvents 및 컨텍스트 내 및 컨텍스트 외부 후크 함수를 참조하세요.

32비트 및 64비트 상호 운용성에 대한 자세한 내용은 프로세스 상호 운용성을 참조하세요.

Windows Automation API 개요