Как конвертировать приложение OWL/BP7 в Delphi?

Какой инструмент / подход вы бы предложили преобразовать в Delphi большого 16-битного Windows GUI-приложения, написанного на старом Borland Pascal 7 / OWL?

Понимание довольно значительных различий между OWL и VCL, а также различий между манипуляциями с указателями в 16-битном паскале и современным использованием строк и объектов в Delphi - есть ли способы / инструменты, которые могли бы помочь избежать почти полного переписать приложение?

5 ответов

Я думаю, вам нужно определить;

а) какая часть кода связана с бизнес-логикой, манипулированием данными (базой) и такими вещами, как собственные файловые структуры, математическая обработка и т. д.? Это вещи, которые могут быть в значительной степени "как есть", потому что более вероятно, что они будут написаны на "паскале" с гораздо меньшими, очевидными элементами OWL/BP7. Например, когда я делал это с приложением, у меня был ряд модулей, которые занимались загрузкой / сохранением проприетарных файлов, подсчетом пасхи, подсчётом математики в массивах и т. Д. - всё это перешло от BP7 к Delphi (1) практически без изменений.

б) какая часть кода связана с графическим интерфейсом (и ничем иным) - обработчиками цикла сообщений, конструкторами элементов диалога, свойствами элементов управления и т. д. Этот материал потребует много работы для переноса в Delphi, и если вы не сможете найти кого-либо с хорошей линией в.RES->.DFM (или аналогичной), я думаю, вы будете смотреть на создание этого бита с нуля. Нет ничего плохого, потому что, если это 16-битное приложение для Windows, вы, вероятно, захотите воспользоваться возможностью, чтобы хотя бы сделать его более "современным" в любом случае. Я думаю, что это будет самая трудоемкая часть проекта.

c) сколько кода использует вещи, которые, как вы знаете, могут быть выполнены по-другому в Delphi, но это сработало бы в том виде, в каком оно сейчас написано на паскале? Вот где смысл @BloodySmartie о переходе на более старую версию Delphi имеет для меня смысл. Вы должны иметь возможность портировать этот проект на что-то вроде Delphi 5/7, внося очевидные (и хорошо понятые) изменения в такие вещи, как манипулирование строками. Чем больше этих вещей вы можете оставить не портированными, тем лучше, на мой взгляд. Получите что-то, что работает и с которым вы проверяете базовое поведение, а затем приступите к процессу рефакторинга / уточнения, чтобы максимально использовать Delphi, когда ресурсы позволяют это. У вас могут быть (как и я) массивы указателей в BP7, где каждый указатель обращается к массиву указателей, которые в конечном итоге приводят к объекту - так мы обошли ограничения памяти в 16-битном мире Windows. Когда я впервые портировал свое приложение, эти массивы указателей на массивы указателей все еще работали в Delphi, и я оставил их в покое, пока у меня не было времени сделать что-то более похожее на Delphi со структурами.

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

Давным-давно, когда я переставлял OWL на VCL (на C++), было просто написать все с нуля. Могут быть некоторые части кода, которые не имеют отношения к пользовательскому интерфейсу и манипуляциям со строками, но в остальном это совсем другое.

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

Я думаю, что нет никакого инструмента для поддержки вашей миграции, но я бы попробовал начать со старой версии Delphi, такой как 1,2 или 3. Этот синтаксис должен быть намного ближе к BP7, чем синтаксис более новых версий Delphi.

В настоящее время вы должны сначала попытаться перенести логику своего приложения в delphi без каких-либо визуальных элементов. Затем используйте дизайнер форм, чтобы перестроить ваш графический интерфейс.

Важно обратить внимание на то, что строка DOS - это строка ASCII-String, в то время как строки Delphi до Delphi 2007 имеют кодировку ANSI. В Delphi 2009 ключевое слово string описывает строку Unicode.

У нас также было и остается множество заявок на сову. поэтому мы сделали перенос 16-битной совы на 32-битную сову и для этого все еще разрабатываем и поддерживаем наши приложения на основе совы (фактически с Delphi 2007 для win32).

Вы можете найти этот способ проще и быстрее, чем перейти на vcl.

ура Андрей

FrameworkPascal.com предоставляет эффективное решение с минимальными изменениями исходного кода Windows 3.1. Мы делали это некоторое время, но теперь мы предоставляем округленное решение с 32-битными совместимыми модулями OWL. Мы также обеспечиваем модули ODBC SQL, технологию безопасности на основе MAC-адресов и специальные блоки, подобные CRT, которые могут обрабатывать код, написанный для режима текстового и графического режимов DOS, смешанный с новой 32-битной графикой и ориентированный на приложения с графическим интерфейсом Windows 32/64., Устаревший код может быть скомпилирован с помощью OWL Windows MDI, начиная с демонстрационных моделей приложений, которые можно быстро изменить.

Другие вопросы по тегам