Поделиться через


Взаимодействие процессов

Вы можете запускать приложения на основе Win32 в 64-разрядной версии Windows с помощью уровня эмуляции. Windows 10 в ARM включает слой эмуляции x86-on-ARM64. Дополнительные сведения см. в разделе Выполнение 32-разрядных приложений.

В 64-разрядной версии Windows 64-разрядный процесс не может загрузить 32-разрядную библиотеку динамической компоновки (DLL). Кроме того, 32-разрядный процесс не может загрузить 64-разрядную библиотеку DLL. Однако 64-разрядная версия Windows поддерживает удаленные вызовы процедур (RPC) между 64-разрядными и 32-разрядными процессами (как на одном компьютере, так и на разных компьютерах). В 64-разрядной версии Windows внепроцессный 32-разрядный COM-сервер может взаимодействовать с 64-разрядным клиентом, а внепроцессный 64-разрядный COM-сервер может взаимодействовать с 32-разрядным клиентом. Таким образом, если у вас есть 32-разрядная библиотека DLL, которая не поддерживает COM, ее можно упаковать на внепроцессный COM-сервер и использовать COM для маршалинга вызовов 64-разрядного процесса и из него.

Внутрипроцессные серверы в настоящее время регистрируются с помощью записи реестра InprocServer . В 64-разрядной версии Windows 64- и 32-разрядные внутрипроцессные серверы должны использовать запись InprocServer32 .

Чтобы портировать дескрипторы, которые по своей природе являются локальными для компьютера и никогда не будут использоваться в пределах 32-разрядной или 64-разрядной границы, используйте тип HANDLE_PTR вместо типа INT_PTR или DWORD_PTR . Сюда входит перенос интерфейсов RPC, передающих такие дескрипторы, как значения DWORD . 64-разрядная HANDLE_PTR составляет 64 бита по проводу (не усечена) и поэтому не нуждается в сопоставлении. (32-разрядная HANDLE_PTR — 32 бита по проводу.)

Дополнительные сведения см. в разделе Проектирование 64-разрядных совместимых интерфейсов.