Нет, вы не можете напрямую сделать это.64-разрядный процесс может выполнять только 64-разрядный код, а 32-разрядный процесс может выполнять только 32-разрядный код.
Хитрость заключается в использовании нескольких процессов .... (Обратите внимание, что это можетбыть сделано для невизуального кода и даже для элементов графического интерфейса, хотя для визуальных элементов могут быть небольшие, но проблемные варианты поведения.)
Наиболее распространенное решение - это обернуть 32-битную DLLв COM-сервере вне процесса, который вы можете вызвать через 64/32 битный барьер.(Это происходит в обоих направлениях: вы можете создать 64-битный внепроцессный COM-сервер и вызывать его также из 32-битного приложения.)
Да, есть и другие способы представить это, но наиболее распространенным являетсядля использования COM:
- Создайте новый 32-битный внепроцессный COM-сервер, на котором размещена ваша 32-битная DLL и предоставляется необходимая функциональность из 32-битной библиотеки DLL.
- Вызовите этот COM-сервер из своего 64-битного кода
Я должен добавить, что можно также создать новый 32-битный COM-сервер в качестве внутрипроцессного COM-сервера, а затемнастроить COM + для его запуска.COM + запустит его из процесса, и волшебным образом запустит ваш 32-битный в процессе COM-сервер вне процесса, где вы можете прозрачно вызвать его из 32- и 64-битного кода, как если бы он был в процессе.(Обратите внимание, что если COM-сервер является элементом управления с графическим интерфейсом, выход из процесса может или не может работать. Команда, с которой я работаю, сделала это успешно, но есть сложности - некоторые из которых не могут быть преодолены - связанные с перехватом родителяокна и элементы управления, которые нельзя сделать через границу процесса.)