Импорт проекта из Delphi в Lazarus

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

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

Импорт проекта из Delphi в Lazarus

Сообщение Nik » 02.06.2010 23:00:34

Столкнулся с необходимостью перевести проект из Delphi в Lazarus. Первые попытки импорта при помощи мастера успехом не увенчались: часть форм не конвертируется. При этом никаких ошибок не возникает ("Конвертация и проверка форм DFM" показывает, что конвертация успешна, но lfm файл не появляется).
Собственно, никаких особо экзотичных компонентов на формах нет: несколько StringGrid, TreeView, Memo, Button, PageControl, GroupBox'ы, ActionList. В "Лазаре" аналоги всего есть (даже все свойства и методы, которые я реально использую, - на месте).

Вопрос просто: в чём может быть затык? В инете найти внятной информации по конвертации проектов не удалось (разве что насчёт PageContol на одном сайте написано, что, мол, его надо перед конвертацией заменить на TabControl и фреймы; вот только даже формы без PageControl конвертируются через одну).
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Импорт проекта из Delphi в Lazarus

Сообщение скалогрыз » 02.06.2010 23:21:38

какую версию Лазаря используешь?
Конвертер активно улучшается в trunk-е.

Nik писал(а):В инете найти внятной информации по конвертации проектов не удалось (разве что насчёт PageContol на одном сайте написано, что, мол, его надо перед конвертацией заменить на TabControl и фреймы; вот только даже формы без PageControl конвертируются через одну).

http://lazarus-dev.blogspot.com/2010/04 ... erter.html
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Импорт проекта из Delphi в Lazarus

Сообщение Nik » 03.06.2010 09:44:08

Использовал последний Daily Snapshots (Lazarus-0.9.29-25811-fpc-2.4.1-20100601-win32).
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Импорт проекта из Delphi в Lazarus

Сообщение скалогрыз » 03.06.2010 10:05:27

Nik писал(а):Использовал последний Daily Snapshots (Lazarus-0.9.29-25811-fpc-2.4.1-20100601-win32).

можно и по фотографиям попробовать лечить...
но как насчёт поделиться неконвертируемым delphi проектом?!

если он закрытый и исходники выдавать нельзя, попробуй собрать "липовый" проект, т.е. тупо убрав весь код (implementation) из оригинального проекта.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Импорт проекта из Delphi в Lazarus

Сообщение Nik » 03.06.2010 10:39:52

"Липа" - во вложении. Все формы на месте, юниты вычищены от кода (проект делается для заказчика, так что код отдать не могу; да и с конвертацией кода нет никаких проблем - компилируется с минимальными изменениями).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Импорт проекта из Delphi в Lazarus

Сообщение скалогрыз » 03.06.2010 12:11:03

тех модулей, которые у тебя не ковертируются, нет в uses секции .dpr файла! (добавь их туда!)

Код: Выделить всё
uses
  Forms,
  Splash in 'Splash.pas',
  delitem in 'delitem.pas' {DelForm},
  basket in 'basket.pas' {BasketForm},
  delitem2 in 'delitem2.pas' {Del2Form},
  delitem3 in 'delitem3.pas' {Del3Form},
  CatEdit in 'CatEdit.pas' {CatEditForm}
  // дописать тут:
  agent in 'agent.pas', {agent}
  трали-вали in 'трали-вали.pas' {трали-вали}
;


Странная баго-фича. Хотя, вполне объяснимая. Можешь добавить в bug-report (bugs.freepascal.org):

Subj: Delphi to Lazarus converter
Description: Used and **available** units and forms are not converted by delphi converter, because not used by the .dpr (though used by other forms and units)

за одним можешь пожаловаться на конвертацию Unicode.

кстати, эти модули ты можешь сконвертировать отдельно от проекта: Tools->Convert Delphi Unit to ... - .dfm так же автоматически преобразовывается.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Импорт проекта из Delphi в Lazarus

Сообщение Nik » 03.06.2010 14:29:04

скалогрыз писал(а):тех модулей, которые у тебя не ковертируются, нет в uses секции .dpr файла! (добавь их туда!)

Спасибо! Действительно, удалось конвертировать проект, добавив все модули в DPR. После прочистки форм от лишних свойств проект скомпилировался в Lazarus :) Сейчас допиливаю код - "Лазарь" несколько иначе работает с компонентами (в частности с Grig'ом).


за одним можешь пожаловаться на конвертацию Unicode.

С этим проблем особых не было, как ни странно - ручками сменил кодировку в Notepad++ :)

Добавлено спустя 25 минут:
При сборке проекта компилятор выдаёт целую кучу Hint'ов и парочку Warning'ов со следующим сообщением:

main.pas(1906,15) Hint: Conversion between ordinals and pointers is not portable


Почти все они связаны с кодом, отвечающим за выдёргивание данных из узла TreeView. Например, так:
Ind:=Integer(CategorTree.Selected.Data)


Как я понимаю, такой код не портабелен? Насколько это критично, если в будущем проект планируется переносить на Linux, и как это можно исправить с наименьшими жертвами (логику работы программы менять не хочется, а упомянутые преобразования там используются довольно часто)?
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Импорт проекта из Delphi в Lazarus

Сообщение Odyssey » 03.06.2010 16:08:21

На 64-разрядных ОС CategorTree.Selected.Data (типа Pointer) будет такой же разрядности как Int64, а Integer останется 32-разрядным. В результате если в Data окажется число за пределами диапазона Integer, в указанном коде произойдёт переполнение. Если в Data вы всегда пишете значения типа Integer, т.е.
Код: Выделить всё
CategorTree.Selected.Data := Pointer(Ind);
то всё должно работать.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Импорт проекта из Delphi в Lazarus

Сообщение Nik » 03.06.2010 16:18:09

Спасибо за разъяснения. В Data всегда пишется Integer (по логике там в большинстве случаев даже ShortInt достаточно).
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров


Вернуться в Lazarus

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

Сейчас этот форум просматривают: MaratIsk и гости: 20

Рейтинг@Mail.ru