Поддержка 64-битной ОС, которая в настоящее время работает в 32-битной ОС - PullRequest
1 голос
/ 30 июня 2010

У меня есть приложение, которое имеет много служб и один модуль пользовательского интерфейса. Все это разработано в VC ++ 6.0. Общая KLOC будет 560 KLOC.

Он использует Mutltithreading, MFC и все типы данных, такие как word, int, long.

Теперь нам нужно поддерживать 64-битную ОС. Какие изменения мы должны внести в продукт.

Под поддержкой я имею в виду как запуск приложения на 64-битной ОС, так и использование 64-битной памяти.

Изменить: я исключаю миграцию на VS2005 или что-либо выше, чем VC6.0 из-за нехватки времени.

Итак, какие изменения нужно сделать.

Ответы [ 5 ]

5 голосов
/ 30 июня 2010

64-битная Windows включает 32-битную версию через WOW. Любое 32-битное приложение должно просто продолжать работать.

(Только в драйверах есть для соответствия разрядности ОС.)

[Примечание для комментаторов: плагины & mdash; любого типа & mdash; не являются отдельными приложениями, а dll-файлами, используемыми другими приложениями, которые должны соответствовать хосту. В этом случае вы также получите ту же проблему, когда 64-битные расширения несовместимы с 32-битными хостами.]

4 голосов
/ 30 июня 2010

Как говорит Ричард, 32-битная версия должна продолжать работать, если у вас нет драйвера, расширения оболочки или чего-то еще.

Однако, если вам нужно обновить код, вы собираетесьЯ должен обновить и компилятор: я не думаю, что MFC получил хорошую 64-битную поддержку до VS2005 или позже.Я бы посоветовал вам получить 32-битное кодовое построение в VS2010 - это будет , а не - тривиальным - и затем начать думать о преобразовании его в 64-битный.Конечно, вы можете оставить производственные 32-битные сборки в VC6, но тогда вы добавите бремя сопровождения.

Вероятно, вы получите большую часть конвертации, перевернув компилятор на 64-битный и включив полные предупреждения -особенно учитывая размер вашего кода, может быть нецелесообразно просматривать все это.Одна вещь, на которую следует обратить внимание, - это хранить указатели в целых числах, словах и т. Д., Которые теперь могут быть слишком короткими, чтобы удерживать указатель - теперь вам нужен DWORD_PTR и т. Д. - но я думаю, что предупреждения действительно это улавливают.если это во многих компонентах, то вам может потребоваться перенести только несколько компонентов на 64-битные.Затем, к сожалению, у вас есть проблемы с длиной данных для связи между двумя версиями.

2 голосов
/ 01 июля 2010

Вы должны преобразовать в более новый компилятор. Временные ограничения в значительной степени не имеют значения. Компилятор VC6 просто не может генерировать 64-битный код. Каждый указатель, который он генерирует, является 32-битным, для начала. Если вам нужно получить доступ к «64-битной памяти», то есть памяти выше 0x00000000FFFFFFFF, тогда 32-битной памяти просто недостаточно.

1 голос
/ 30 июня 2010

Если вы исключаете возможность замены своей IDE на ту, которая по сути поддерживает 64-битную компиляцию и отладку, вы делаете свою работу излишне сложной.Вы уверены, что оно того не стоит?

0 голосов
/ 01 июля 2010

Только для работы на 64-битной ОС вам не нужно вносить никаких изменений.Это то, для чего предназначен WOW64.

Если, однако, вы хотите работать с 64-битной версией (т. Е. Получить доступ к 64-битной области памяти), вам придется скомпилировать как 64-битную.Это означает использование IDE, которая поддерживает 64-битную версию.Обойти это невозможно.

У большинства программ не должно возникнуть проблем при преобразовании в 64-битную кодировку, если они написаны с приличными стандартами кодирования (в основном, нет предположений о размере указателя, например, при преобразовании int-указателя).Вы получите много предупреждений о таких вещах, как преобразования std :: size_t, но они будут довольно бессмысленными.

...