2013-06-24 3 views
0

Я разговаривал с членом команды на работе о преобразовании нашего программного пакета с 32-разрядной до 64-разрядной версии, а также об использовании Появились 32-разрядные DLL в 64-битном процессе. Он упомянул, что это возможно, и вы можете сделать то же самое, чтобы использовать 64-битные библиотеки из 32-битного процесса, но не вдавались в подробности о нем, кроме упоминания необходимости использования сервера inproc или более сложного «бокса», методы.Объяснение того, как работает доступ к 32-разрядным библиотекам из 64-разрядного процесса, и наоборот

Я действительно хочу знать, как это сделать для моей собственной справки, но меня больше интересует, как это работает под капотом. Как можно получить доступ к пространству памяти, которое не должно быть видимым между 32 и 64-битными процессами? Как уже упоминалось, также не помешает знать, как это сделать сам, я обычно работаю с C++/CLI или C#.

ответ

0

, кроме того, чтобы отметить использовать сервер InProc ...

Это невозможно в процессе производства, 64-разрядный процесс не может загружать и выполнять любой 32-битный код. Это будет проблемой только в том случае, если у вас есть зависимость от неуправляемого кода, чистый код .NET всегда может быть привязан к требуемой архитектуре. Очень приятная штука, обеспечиваемая компиляцией «точно в срок».

Единственный способ сделать такую ​​неуправляемую работу кода - вне процесса, используя 32-разрядный вспомогательный процесс, чтобы предоставить код совместимому дому. Вы получаете это почти бесплатно, если неуправляемый код предоставляется как COM-сервер, вы можете настроить его AppId для запуска сервера в суррогатном процессе. Просто задайте правильные ключи реестра. Если нет, то создайте свое собственное .NET-приложение с целевым объектом платформы, установленным на x86, чтобы он выполнялся как 32-разрядный процесс. Попросите их поговорить друг с другом с помощью механизма взаимодействия с процессом .NET, такого как WCF, Remoting, именованных каналов или сокетов.