Межпроцессное взаимодействие между 32-разрядными и 64-разрядными приложениями

Для взаимодействия между 32-разрядными и 64-разрядными приложениями можно использовать следующие методы:

  • В 64-разрядных версиях Windows для взаимодействия используются 32-разрядные дескрипторы. При совместном использовании дескриптора между 32-разрядными и 64-разрядными приложениями значимы только нижние 32 бита, поэтому можно безопасно усечь дескриптор (при передаче от 64-разрядной до 32-разрядной) или расширить дескриптор со знаком (при передаче с 32-разрядной до 64-разрядной). Дескрипторы, которые могут быть общими, включают дескрипторы для пользовательских объектов, таких как windows (HWND), дескрипторы объектов GDI, таких как ручки и кисти (HBRUSH и HPEN), и дескрипторы именованных объектов, таких как мьютексы, семафоры и дескрипторы файлов.
  • Можно использовать удаленные вызовы процедур (RPC).
  • Локальные серверы COM можно использовать, если для всех используемых интерфейсов зарегистрированы как 32-разрядные, так и 64-разрядные библиотеки DLL прокси-сервера или заглушки.
  • Общая память может использоваться, если типы, зависимые от указателя, преобразуются должным образом (или не используются).
  • Функции CreateProcess и ShellExecute могут запускать 32-разрядные и 64-разрядные процессы из 32-разрядных или 64-разрядных процессов с определенными ограничениями.

64-разрядный исполняемый файл, расположенный в папке %windir%\System32, не может быть запущен из 32-разрядного процесса, так как перенаправитель файловой системы перенаправляет путь. Не отключайте перенаправление для этого; Вместо этого используйте %windir%\Sysnative. Дополнительные сведения см. в разделе Перенаправитель файловой системы.