Возможность компиляции Delphi2 проекта в Lazarus?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение Electric » 19.01.2020 20:38:58

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

Мои познания в Делфи были очень поверхностные и я длительное время не писал на нем, так что я могу не знать даже простых вещей. Я скачал папку с исходным кодом проекта и компонентов, запустил преобразование проекта Delphi в Lazarus, конвертация прошла без явных ошибок. При запуске компиляции сразу же вылетает ошибка:

Компиляция проекта, цель: lib\i386-win32\Imagopro.exe: Код завершения 1, ошибок: 1, предупреждений: 1
Warning: Recompiling FPReadJPEG, checksum changed for JPEGLib
Fatal: Невозможно найти FPReadJPEG, используемый в Graphics. Убедитесь, что все файлы PPU пакета находятся в его каталоге вывода. PPU в неверном каталоге=C:\Lazarus\fpc\3.0.4\units\i386-win32\fcl-image\fpreadjpeg.ppu..
Electric
незнакомец
 
Сообщения: 9
Зарегистрирован: 19.01.2020 20:23:50

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение LearnMagic » 19.01.2020 22:52:53

Будет проблематично.
Одна из проблем - Lazarus использует строки UTF-8
Быстрее будет не компилировать, а переносить. При этом заменять компоненты Delphi на компоненты Lazarus.
Если каких-то не хватает, то можно установить прямо из Lazarus или воспользоваться https://sourceforge.net/projects/lazarus-ccr/
LearnMagic
новенький
 
Сообщения: 66
Зарегистрирован: 10.11.2016 23:13:38

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение Vadim » 20.01.2020 03:26:09

Electric писал(а):Убедитесь, что все файлы PPU пакета находятся в его каталоге вывода. PPU в неверном каталоге=C:\Lazarus\fpc\3.0.4\units\i386-win32\fcl-image\fpreadjpeg.ppu

Убедились?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение Electric » 20.01.2020 05:20:33

LearnMagic писал(а):Будет проблематично.
Одна из проблем - Lazarus использует строки UTF-8
Быстрее будет не компилировать, а переносить. При этом заменять компоненты Delphi на компоненты Lazarus.
Если каких-то не хватает, то можно установить прямо из Lazarus или воспользоваться https://sourceforge.net/projects/lazarus-ccr/


Понятно.
Дело в том, что проект использует достаточно древние компоненты вроде этого или этого, не уверен, что у них есть современные аналоги.
В таком случае, что проще: перевести/скомпилировать такой проект в Lazarus или к примеру попробовать сделать это в Delphi 7?

Vadim писал(а):
Electric писал(а):Убедитесь, что все файлы PPU пакета находятся в его каталоге вывода. PPU в неверном каталоге=C:\Lazarus\fpc\3.0.4\units\i386-win32\fcl-image\fpreadjpeg.ppu

Убедились?


Я просто не совсем понимаю, что они хотят. Под каталогом вывода они понимают рабочую папку с проектом?
Electric
незнакомец
 
Сообщения: 9
Зарегистрирован: 19.01.2020 20:23:50

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение Vadim » 20.01.2020 10:03:53

Electric писал(а):Я просто не совсем понимаю, что они хотят. Под каталогом вывода они понимают рабочую папку с проектом?

Нет, под каталогом вывода они понимают тот каталог, куда складываются откомпилированные компилятором модули, т.е. вывод компилятора. В данном случае речь идёт о стандартных модулях FreePascal, которые находятся в его стандартном каталоге. Конкретное размещение, где откомпилированный модуль fpreadjpeg должен лежать, как раз в тексте и приводится:
Electric писал(а):C:\Lazarus\fpc3.0.4\units\i386-win32\fcl-image\fpreadjpeg.ppu


Добавлено спустя 6 минут 15 секунд:
Electric писал(а):не уверен, что у них есть современные аналоги.

С JPEG'ом может справится и сам FreePascal. Он как раз и пытается это сделать с помощью своего модуля fpreadjpeg. Но, сами понимаете, код программы может несколько поменяться.
Electric писал(а):что проще: перевести/скомпилировать такой проект в Lazarus или к примеру попробовать сделать это в Delphi 7

Что проще - можете решить только Вы сами. Если хотите уйти от проприетарного ПО, то путь будет один - постепенно доводить код существующего проекта до ума именно в Lazarus и нигде больше. Если речь идёт о том, чтобы в бешеном темпе слегка осовременить существующий код, то проще, конечно, откомпилировать его в Delphi 7, но и в этом случае от ошибок Вы застрахованы не будете.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение Снег Север » 20.01.2020 13:01:59

Vadim писал(а):то проще, конечно, откомпилировать его в Delphi 7

Всё равно может понадобиться допиливать. Точно уже не помню, но где-то между четверкой и пятеркой, вроде, была заметная несовместимость и проекты приходилось серьезно переделывать. А тут вообще с двойки...
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение Electric » 20.01.2020 16:12:21

Vadim писал(а):Нет, под каталогом вывода они понимают тот каталог, куда складываются откомпилированные компилятором модули, т.е. вывод компилятора. В данном случае речь идёт о стандартных модулях FreePascal, которые находятся в его стандартном каталоге. Конкретное размещение, где откомпилированный модуль fpreadjpeg должен лежать, как раз в тексте и приводится:
Electric писал(а):C:Lazarusfpc3.0.4unitsi386-win32fcl-imagefpreadjpeg.ppu


Вообще, он как раз там и лежит в этом каталоге, поэтому и возник вопрос.

Vadim писал(а):Что проще - можете решить только Вы сами. Если хотите уйти от проприетарного ПО, то путь будет один - постепенно доводить код существующего проекта до ума именно в Lazarus и нигде больше. Если речь идёт о том, чтобы в бешеном темпе слегка осовременить существующий код, то проще, конечно, откомпилировать его в Delphi 7, но и в этом случае от ошибок Вы застрахованы не будете.


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

Снег Север писал(а):
Vadim писал(а):то проще, конечно, откомпилировать его в Delphi 7

Всё равно может понадобиться допиливать. Точно уже не помню, но где-то между четверкой и пятеркой, вроде, была заметная несовместимость и проекты приходилось серьезно переделывать. А тут вообще с двойки...


Т.е. получается, по трудозатратам это едва ли проще, чем написать аналогичный проект с нуля на языке, который знаешь лучше.

Добавлено спустя 27 минут 16 секунд:
Переместил для эксперимента файл fpreadjpeg.ppu из каталога "C:\Lazarus\fpc\3.0.4\units\i386-win32\fcl-image\" в "каталог вывода" (найденный в настройках) ИМЯПРОЕКТА\lib\i386-win32\
Ошибка все равно возникает.
Electric
незнакомец
 
Сообщения: 9
Зарегистрирован: 19.01.2020 20:23:50

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение Снег Север » 20.01.2020 17:14:45

Electric писал(а):Т.е. получается, по трудозатратам это едва ли проще, чем написать аналогичный проект с нуля на языке, который знаешь лучше.

Смотрите - мы не знаем о вашем проекте толком ничего. Те компоненты, на которые вы дали ссылки функционально легко заменяются современными. Всякие расчетные блоки переносятся один к одному. Да, "в лоб" сконвертировать не вышло. Но задача вполне решаемая.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение Vadim » 20.01.2020 19:18:38

Снег Север писал(а):Всё равно может понадобиться допиливать. Точно уже не помню, но где-то между четверкой и пятеркой, вроде, была заметная несовместимость

Вполне может быть. Я за Дельфи не садился со времён царя Гороха... :D

Electric писал(а):Нет, причин для спешки нет, это не прямая потребность по работе, скорее хобби.

В таком случае для приобретения опыта конвертации лучше будет покопаться с Lazarus'ом.
Наверное оптимальным будет такой вариант:
1. Составить общую блок-схему алгоритма работы программы. :D Да-да, этот этап почему-то многие пропускают, как несущественный. А он зачастую помогает решить задачу которую, казалось бы, решить невозможно.
2. По каждому блоку общей схемы составить детализированную блок-схему. Т.е. провести декомпозицию.
3. Сопоставить реальный код с блок-схемой и по очереди переносить блоки кода в новый проект, с заменой отсутствующих в Lazarus'е компонентов на аналогичные, но присутствующие.

Electric писал(а):Переместил для эксперимента файл fpreadjpeg.ppu из каталога "C:\Lazarus\fpc\3.0.4\units\i386-win32\fcl-image\" в "каталог вывода" (найденный в настройках) ИМЯПРОЕКТА\lib\i386-win32\
Ошибка все равно возникает.

fpreadjpeg - это составная часть не Lazarus или Вашего проекта, а FPC. Найдите файл конфигурации FPC в C:\Lazarus\fpc\3.0.4\ (fpc.cfg) и проверьте там ключи "-Fu", правильные ли они показывают каталоги стандартных откомпилированных модулей FPC.
Ещё в качестве предположения - не случилось ли у Вас невзначай перекомпиляция модулей или даже самого Lazarus другим компилятором, другой версии или другой разрядности. Если да, то стандартные модули он совершенно точно видеть не будет, даже если они лежат в правильном каталоге и с правильными именами.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение Electric » 20.01.2020 20:24:57

Снег Север писал(а):Смотрите - мы не знаем о вашем проекте толком ничего. Те компоненты, на которые вы дали ссылки функционально легко заменяются современными. Всякие расчетные блоки переносятся один к одному. Да, "в лоб" сконвертировать не вышло. Но задача вполне решаемая.


Проект не слишком большой, но мне сложно судить об объеме Delphi проектов. Основная сложность в том, что он в свое время был написан инженером, а не профессиональным программистом, код может быть очень запутан и недостаточно задокументирован, я пока не вникал в подробности. Вот код проекта, что я достал из сохранившихся веб-архивов и файлам одного из пользователей. Код компилируется в Delphi 2, что я проверил, но сам автор испытывал сложности при попытке перехода на более поздние версии делфей.

Vadim писал(а):В таком случае для приобретения опыта конвертации лучше будет покопаться с Lazarus'ом.
Наверное оптимальным будет такой вариант:
1. Составить общую блок-схему алгоритма работы программы. :D Да-да, этот этап почему-то многие пропускают, как несущественный. А он зачастую помогает решить задачу которую, казалось бы, решить невозможно.
2. По каждому блоку общей схемы составить детализированную блок-схему. Т.е. провести декомпозицию.
3. Сопоставить реальный код с блок-схемой и по очереди переносить блоки кода в новый проект, с заменой отсутствующих в Lazarus'е компонентов на аналогичные, но присутствующие.


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

fpreadjpeg - это составная часть не Lazarus или Вашего проекта, а FPC. Найдите файл конфигурации FPC в C:\Lazarus\fpc\3.0.4\ (fpc.cfg) и проверьте там ключи "-Fu", правильные ли они показывают каталоги стандартных откомпилированных модулей FPC.
Ещё в качестве предположения - не случилось ли у Вас невзначай перекомпиляция модулей или даже самого Lazarus другим компилятором, другой версии или другой разрядности. Если да, то стандартные модули он совершенно точно видеть не будет, даже если они лежат в правильном каталоге и с правильными именами.


Код модулей и проекта распакован из исходников. Lazarus свежеустановленный 32-разрядный в виртуальной машине x86.
Файл fpc.cfg находится в каталоге "C:\lazarus\fpc\3.0.4\bin\i386-win32". Любые упоминания "fpreadjpeg" или "jpeg"в файле отсутствуют.
Electric
незнакомец
 
Сообщения: 9
Зарегистрирован: 19.01.2020 20:23:50

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение Снег Север » 20.01.2020 21:54:47

fpreadjpeg был, по всей вероятности, подключен автоматически при конвертации компонента, который работает у вас с jpeg, но подключился как-то криво.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение Alex2013 » 22.01.2020 14:33:29

Delphi2 ?"Delphi 2 появилась в 1996 году и позволяла разрабатывать 32-битные приложения. "
В принципе ничем особо то "единички" не отличался... А вот дльфи 3 отличатся и сильно . (Там в первые появились "бесконечные строки" и т.д . ) Дльфи 4 (Кстати до сих пор по странному стечению обстоятельств используется в ХайАсме в качестве "секретного компилятора" ) от Дльфи 3 отличался слабо. Дльфи 5 лучшая версия из трех (Все хорошо и удобно ) Дльфи 6 "Экспериментальная гадость" ( Уже не помню чем но раздражала дико) Дльфи 7 "Тот самый дльфи " можно сказать "Классика жанра" . Даже лазарус до сих пор "держит равнение" на Дльфи 7...
А дальше я уже с дельфи капитально так соскочил .(Лазарус подрос, а Дльфи "разбух" и "оплыл" )

Добавлено спустя 11 минут 19 секунд:
Коллекция старых версий Delphi 1, 2, 3, 4. :idea:
https://rutracker.org/forum/viewtopic.php?t=3072243
Можно попробовать постепенно собрать проект во все более высокой версии Delphi и довести до совместимости с "тем самым дельфи 7" код для котрого идеально подходит для конверсии в Лазарус.
Или что более правильно глядя на рабочую версию проекта в Delphi 2 быстренько сделать аналог в свежем Лазарусе (Как я понимаю Delphi 2 вполне можно установить под Вине (с настройкой под софт из Вин95 или ХП ) в линуксе )
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение daesher » 24.01.2020 08:09:43

Electric писал(а):Файл fpc.cfg находится в каталоге "C:\lazarus\fpc\3.0.4\bin\i386-win32". Любые упоминания "fpreadjpeg" или "jpeg"в файле отсутствуют.

Упоминаний быть и не должно. Для начала, надо проверить Вашу сборку Lazarus+FPC. Для этого надо создать новый проект и накидать на форму примерно те компоненты, которые есть в проекте (в данном случае - точно TImage). После этого откомпилировать тестовый проект - если всё нормально, то сконвертированный проект просто неправильно сгенерирован. Надо в инспекторе проекта смотреть зависимости (прежде всего - FCL) и т.д. Иногда бывает разумным переделать проект: создать новый проект, добавить все модули своего, удалить бывший главный модуль.
Если ошибка остаётся даже на тестовом проекте - проблемы в связке Lazarus+FPC. Может, проще их полностью переустановить, удалив файлы конфигурации.
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение Electric » 25.01.2020 13:14:02

Alex2013 писал(а):Можно попробовать постепенно собрать проект во все более высокой версии Delphi и довести до совместимости с "тем самым дельфи 7" код для котрого идеально подходит для конверсии в Лазарус.
Или что более правильно глядя на рабочую версию проекта в Delphi 2 быстренько сделать аналог в свежем Лазарусе (Как я понимаю Delphi 2 вполне можно установить под Вине (с настройкой под софт из Вин95 или ХП ) в линуксе )


Ok, я пока решил сначала испытать в версиях Delphi 3 и выше, уже потом перейти на Lazarus.
Установил третью версию на виртуалку, установил сторонние компоненты для проекта. При запуске компиляции, вылетает ошибка для при обработке результатов ответа на диалоговоe меню:

Код: Выделить всё
if (nc = pSet_u^.pCompList.count) then begin
      answer := MessageDlg('Delete the whole diagram?',
      mtWarning, [mbYes, mbCancel], 0);        {else ask for confirmation}
      undoadd :=  (answer = mrYes);            {undo accepted}
    end else begin                             {not the last components, undo}
      undoadd := true;


Этот фрагмент безошибочно работал во второй версии, но уже в третьей и седьмой вываливается эта ошибка:

Error: Undo.pas(265): Undeclared identifier: 'mrYes'.
FatalError: Could not compile used unit 'Undo.pas'
Последний раз редактировалось Electric 25.01.2020 13:36:55, всего редактировалось 1 раз.
Electric
незнакомец
 
Сообщения: 9
Зарегистрирован: 19.01.2020 20:23:50

Re: Возможность компиляции Delphi2 проекта в Lazarus?

Сообщение Снег Север » 25.01.2020 13:23:59

Electric, добавьте в секцию uses в 'Undo.pas название модуля Controls.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32

Рейтинг@Mail.ru