Перенос приложения MFC (VC6) в .NET 2008 - PullRequest
2 голосов
/ 28 июля 2010

Мне нужен очень конкретный ответ от разработчиков, которые сделали это и хотят знать, как вы решили проблемы, с которыми столкнулись.

У нас очень большое 32-разрядное приложение MFC (VC6), которое существует уже 10 лет.Теперь мы хотим перенести его в неуправляемое 64-разрядное приложение .NET.Здесь у нас есть некоторые проблемы, наш пользовательский интерфейс не должен меняться, нам может понадобиться некоторый управляемый класс .NET для более легкой разработки, не влияя на архитектуру, как добавлять управляемый код с неуправляемым кодом, многие API-интерфейсы win32 могут быть изменены на новые API, должны запускатьсяXP, Vista, ОС Windows 7 без каких-либо изменений, эти действия не должны занимать много времени, анализ новых технологий должен проводиться, поскольку мы являемся программистами MFC ...

Pls, поделитесь своим опытом, и если у вас есть какие-либо четкиедокументы будут очень полезны ...

Примечание: для ясного понимания я перефразирую некоторые моменты снова.Мы хотим перенести наше 32-разрядное приложение с собственным кодом VC6 на собственный код VS2008 (или VS2010) (неуправляемый C ++) с поддержкой 64-разрядных систем.Основное требование - не должно быть никаких изменений в существующем пользовательском интерфейсе.Кроме того, если .NET поддерживает комбинацию управляемого кода с неуправляемым кодом, мы можем попробовать использовать некоторые функции, такие как удаленное взаимодействие .NET в неуправляемой среде C ++.И еще одна важная вещь, которую я хотел бы донести до всех, это то, что мы не собираемся начинать какое-либо кодирование на C # или с нуля.

Ответы [ 3 ]

4 голосов
/ 28 июля 2010

Мы сделали это по шагам (VC6 -> VS2005 -> VS2008 -> (скоро) VS2010) и большинство проблем были связаны с изменениями в API.

  • небезопасная строкаоперации (strcpy против strcpy_s), которые выдают ТОНН предупреждений (используйте препроцессор _CRT_SECURE_NO_WARNINGS, чтобы удалить их, если вы не хотите исправлять их все)

  • Изменено в прототипахобработчики сообщений (возвращает LRESULT, изменения в WPARAM и LPARAM, ...)

  • Устаревший API (вы скоро их обнаружите, я думаю, что на msdn есть страница об этом)

  • Компилятор может быть немного более строгим в отношении стандарта C ++.

Трудно перейти к специфике ...

но взгляните на эту запись в блоге для получения дополнительной информации: http://insidercoding.com/post/2008/08/20/Migrating-from-VC6-to-VC9.aspx

Удачи.Макс.

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

То, что вы просите, на самом деле не является миграцией - это почти полное переписывание, по крайней мере, всего пользовательского интерфейса.Если ваше «очень большое ... приложение» не имеет очень маленького, простого пользовательского интерфейса, я бы бездельничал и задумался.Прочитайте вещей Джоэла, которые вы никогда не должны делать.

Итог: почти наверняка это действительно плохая идея.Если вы все равно это сделаете, вам нужно знать, что будет занимать довольно много времени.

Если вы решите это сделать, вам почти понадобится делать это постепенно.Чтобы сделать это, я, вероятно, начну с поиска отдельных «кусочков» функциональности в существующем коде и превращения этих кусочков в элементы управления ActiveX.Как только вы дошли до того, что ваша основная программа в основном представляет собой довольно минимальную среду, которая в большинстве случаев создает экземпляры и использует элементы управления ActiveX, становится довольно легко создать новую структуру в управляемом коде, которая делает примерно то же самое, делегируя большую частьреальная работа с существующими элементами управления ActiveX.После того, как вы это сделаете, вы можете начать переносить отдельные элементы управления в управляемый код по своему усмотрению.

Смысл этого в том, чтобы избежать длительного интервала, в течение которого вы просто пишете новыйкод, который дублирует старый код, но не может делать никаких обновлений для ваших клиентов.Почти единственная разумная альтернатива, которую я видел достаточно хорошо, - это две отдельные группы разработчиков: одна продолжает работать над базой старого кода и обновляет ее одновременно с тем, как вторая группа начинает полное переписывание с нуля.Если у вас достаточно денег, такой подход может сработать.

Microsoft, например, несколько раз делала подобные вещи.Просто для пары примеров, несколько лет назад, когда появились слухи о том, что Borland (тогда крупнейший конкурент Microsoft в области инструментов языка программирования) собирался выпускать TurboBASIC, Microsoft решила, что QuickBASIC (V2 в то время) действительно не мог конкурировать.В ответ они создали две команды: одну для выполнения QuickBASIC 2 настолько, насколько это целесообразно, до QuickBASIC 2, чтобы создать QuickBASIC 3. Вторая команда полностью переписала с нуля, получив то, что стало QuickBASIC 4.

Другой примерWindows 95/98 / ... против Windows NT.Они продолжили разработку существующей базы кода Windows одновременно с полным переписыванием с нуля для создания Windows NT.Хотя они обеспечивали синхронизацию двух команд, чтобы пользовательские интерфейсы выглядели одинаково и т. Д., Они были разработаны почти полностью отдельно друг от друга.Только после лет перекрытия между ними они, наконец, перестали работать над старой базой кода (и иногда я задаюсь вопросом, не была ли глупость Windows Me хотя бы частично преднамеренной, чтобы более или менее заставить пользователейперейти на базу кода NT).

Однако, если вы не можете сделать это, почти единственный ваш шанс на успех - использовать инкрементный подход.

1 голос
/ 28 июля 2010

Как упоминал Джерри, Джоэл рассказывает об этом в своем блоге «Что никогда не следует делать».Кроме того, есть другие вещи, которые следует учитывать при этом преобразовании.

  1. Что бы вы сделали с существующей кодовой базой VC ++ 6.0.
  2. Время квалификации (разные ОС, SQL и т. Д.), Необходимое для тестирования всего продукта после внесения изменений.
  3. Как вы управляете 2 базами кода с поддержкой 64 бит и без.

PS: Самое главное к тому времени, когда вы исправите и квалифицируете свой продукт в VS2010, я думаю, что VS 2012 выпустит:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...