64-битные функции в 32-битном приложении? - PullRequest
6 голосов
/ 27 апреля 2011

У меня есть 32-битное приложение, которое я планирую запустить на 64-битной Windows 7.

На данном этапе я не могу преобразовать все приложение в 64-битное из-за зависимостей от функций третьих сторон.Тем не менее, я хотел бы иметь доступ к регистрам xmm9-xmm15 в моих оптимизациях SSE, а также использовать дополнительные регистры, которые 64-битный процессор предоставляет в целом при выполнении моего приложения.флаг

Ответы [ 2 ]

9 голосов
/ 04 мая 2011

Мне кажется, что лучшим способом было бы разделить вашу программу на более чем один исполняемый файл .EXE-файл, скомпилированный как 64-битный, может связываться с другим 32-битным EXE-файлом, использующим 32-битную стороннюю DLL, которая вам нужна.У вас будут некоторые накладные расходы в связи, и вам придется реализовать запуск / останов зависимого процесса, но у вас будет четкая архитектура программы.

Если вы разрабатываете нативное приложение C ++, вы можете реализовать второй EXE, например, какCOM ++ внепроцессный объект (LocalServer или даже LocalService).Вы можете рассмотреть способ реализации COM-сервера в C # (см. здесь ).Иногда такой способ может упростить реализацию, и вы можете использовать преимущества как .NET, так и собственного программирования.

3 голосов
/ 27 апреля 2011

Да, вы можете.См. этот пример .

Как указывал Кристофер, этот метод не всегда будет работать, но для этой прямой цели прыгнуть в несколько строк сборки вручную и использовать большерегистрирует, затем помещает результат куда-нибудь и затем возвращается в 32-битный режим, все должно работать нормально.

...