Переписать кодовую базу C из MFC в * nix

#c #linux #mfc

#c #linux #mfc

Вопрос:

Я летом стажируюсь в компании, и мне приходится рассматривать различные способы просмотра текущей кодовой базы (C , MFC, около 100 тыс. строк) и использования конечных автоматов для моделирования текущей программы.

Я прочитал пару статей, и CPP2XMi выглядит так, как будто для начала может быть полезно попытаться построить диаграммы последовательностей.

Конечная цель — оценить возможность отказа от Microsoft как операционной системы и посмотреть на разработку (возможно, на другом языке) на * nix.

Я также начал изучать зависимости MFC, чтобы понять, можем ли мы просто перенести текущий код C .

У меня была программа, запущенная через WINE, и с точки зрения производительности это кажется приемлемым, но мне все еще нужно изучить другие решения, поскольку это будет работать только на X86, в то время как у нас есть другие решения, работающие на MIPS и ARM.

Какие-либо другие идеи или предостережения, на которые я мог бы обратить внимание?

Комментарии:

1. Галстуки — это кричащие галстуки, я думаю, вы имеете в виду оговорки. И скорее вы, чем я — превращение обычной кучи мусора, которая является приложением MFC, в переносимый код заставило бы поморщиться даже храбрецов.

2. Может быть, ему лучше кодировать в галстуке?

3. Нил — Я искренне рассмеялся вслух [я тоже страдаю дислексией]. Думаю, я оставлю это в!

Ответ №1:

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

Если такого разделения нет, я бы посмотрел на возможность создания некоторых разделов кода, которые являются изолированными и переносимыми. Как только у вас будет база переносимости, вы можете начать абстрагировать все сервисы, предоставляемые непереносимым кодом. Любой способ, которым вы ее нарезаете, хотя MFC на Nix — это большое изменение и потребует значительного объема работы. Еще одна возможность — посмотреть, можете ли вы запустить ее под эмулятором Windows.

Комментарии:

1. Мне достоверно сообщили, что большая часть зависимостей связана с Coms и GUI. Сколько работы по их переписыванию я не знаю (пока). Я уже запускал ее под wine с приемлемыми тестами и отсутствием (протестированной) функциональности.

2. @LewisMc: для меня единственной формой «достоверной информации» было бы зайти, чтобы убедиться самому, и провести проверку концепции; по моему опыту, MFC естественно навязчив (даже повсеместен) в том смысле, что так удобно использовать его классы коллекций с двоичным архивированием и т.д. До тех пор, пока вы продолжаете работать с семейством happy MFC / ATL, все тесно связано -nit — и, следовательно, тесно связано. От этих перекрестных зависимостей почти невозможно избавиться, особенно поэтапным способом.

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

Ответ №2:

При чтении книги wxWidgets это кажется очень похожим на MFC. Вы могли бы взглянуть на это.

Ответ №3:

Сначала я бы посмотрел, отделен ли графический интерфейс от остальной части приложения. С MFC это включает в себя ограничение использования служебных классов, таких как CString , кодом, использующим только графический интерфейс.

Если код хорошо продуман таким образом, то, вероятно, проще всего оставить код графического интерфейса MFC в покое и просто создать новый графический интерфейс для других ваших платформ, используя собственную библиотеку графического интерфейса по выбору для каждой новой платформы. Это придаст приложению надлежащий внешний вид и поведение, которых действительно трудно достичь любым другим способом.

Если логика приложения перемешана с кодом GUI, самое время спросить, не могли бы вы выделить ресурсы для создания надлежащего разделения с целью выполнения вышеуказанного после достижения разделения. Это рискованно с точки зрения бизнеса, потому что может показаться, что вы приложили много усилий и просто вернулись к тому, с чего начали. Ваши спонсоры не увидят реального прогресса, пока вы не начнете работу над новым графическим интерфейсом поверх переработанного приложения.

Вы также можете посмотреть на переносимые библиотеки GUI, такие как wxWidgets и Qt.

Я программировал как для MFC, так и для wxWidgets, и концептуально они очень похожи. Мне никогда не приходилось переносить код с одного на другой, но я однажды перенес код из Borland’s OWL в MFC, что было похоже на опыт. Такого рода вещи не особенно сложны; это просто измельчение. Я могу рекомендовать делать это только тогда, когда у вас есть несколько причин для удаления старой библиотеки GUI. Например, возможно, вы также подумывали о том, чтобы полностью отказаться от Visual C или переключиться с Professional на Express, потеряв доступ к MFC. Если вы планировали использовать VC Professional (или выше), становится трудно оправдать отказ от вашего графического интерфейса MFC.

Ответ №4:

Однажды я портировал большую COM-библиотеку из MFC в portable code. Я использовал STL и boost для замены всех битов MFC. Например, CString => std::string и VARIANT => boost::any.

Это заняло вечность, но в основном это была простая замена и настройка. К счастью, в ней не было никакого графического кода — это была библиотека обработки данных.

Комментарии:

1. Меня также попросили взглянуть на языки интерфейса / стандарты, поскольку графический интерфейс «отделен» [насколько это возможно], так что это может быть вариантом для рассмотрения.