Как конвертировать приложение OWL / BP7 в Delphi? - PullRequest
4 голосов
/ 04 февраля 2009

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

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

Ответы [ 5 ]

2 голосов
/ 04 февраля 2009

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

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

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

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

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

1 голос
/ 16 сентября 2009

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

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

веселит Andrej

1 голос
/ 04 февраля 2009

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

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

1 голос
/ 04 февраля 2009

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

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

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

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

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

...