![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
KOL2FPC
Кладов © (2003-05-30 19:04:00)
Ну вот, первый шажок сделан: утилиту KOL2FPC я сделал, какое-то количество кода поправил, теперь формируется минимальный KOLFPC.PAS, в нем пока только TObj и TList, и это уже компилируется под FPC и даже кажется выполняется (для Windows пока). Кому интересно посмотреть, я выкладываю утилиту KOL2FPC, а так же архивчик GotoFPC.zip, там обновление для kol.pas от версии 1.74 (именно к обновленной версии и нужно применять KOL2FPC.exe, чтобы получился KOLFPC.PAS), и пример приложения (тьфу, какого приложения! программы), которое умеет так пока мало... но занимает 83,5К даже после удаления отладочной информации :) Ну, лиха беда начало, дойдут руки - мы и системные модули в FPC поменяем, чтобы добиться хотя бы в районе 40К минимальную прогу делать.
ссылки: http://bonanzas.rinet.ru/KOL2FPC.zip
http://bonanzas.rinet.ru/GotoFPC.zip
Кладов (2003-06-06 11:51:00) [41]
> Линковка:
>
> {$R myfile.res}
в какой версии это работает? У меня не работает ни в 1.0.5, ни в 1.0.6
Иван Шихалев (2003-06-06 11:35:00) [42]
Не вижу никаких проблем с ресурсами в FPC.
Компиляция .rc в .res:
windres -i myfile.rc -o myfile.res
Оба файла требуется явно указать с явными расширениями.
Линковка:
{$R myfile.res}
Кладов (2003-06-05 15:23:00) [43]
windows.pasиз того набора, что у меня, похоже, просто игнорируется, и всегда используется pp\units\win32\rtl. Оно, конечно, можно тамошний переименовать, чтобы наш взялся, но пока различия не слишком велики. Иногда то, что у Борланда объявлено const Rect: TRect, в pp идет как PRect. В таких случаях вставляю правильное опеределение прямо в модифицированный kol.pas.
BASM: там все проверено, надо еще везде добавить после внутренней вставки [ список испорченных регистров ] - для FPC требуется всегда. Большая часть кода идет пока как только Паскаль.
Ресурсы. Попробовал ту строку в ppas.bat руками вставить, с поправками, не ругается, но ничего никуда и не добавляет. Так же и из гуишного Dev-Pascal: ругаться не ругается, но иконку не добавляет. ResourceWorkshop говорит, что нет в exe-файле никаких ресурсов.
Результаты сравнения классов и объектов на примере исправленного TestKOL4 дают:
Без замены system.dcu и только PAS_VERSION:
Delphi + объекты 50К
Delphi + классы 51,1К
FPC (только классы) 72K
С заменой system.dcu, ASM_VERSION:
Delphi + объекты 35K
Delphi + классы пока нет данных
С заменой system.dcu, PAS_VERSION:
Delphi + объекты 40К
Delphi + классы 41,5К
Ка видим, разница с объектами на этом примере 1,5К всего. Но примеры бывают разные. Реальное приложение спортирую - посмотрим еще.
PVOzerski (2003-06-05 12:58:00) [44]
И еще. Дистрибутив FPC содержит свои юниты windows и mmsystem. При этом по меньшей мере юнит windows от FPC не во всех декларациях параметров совпадает с юнитом от Borland. И какой выбираем (с учетом всяких (С), с одной стороны, и большей "вылизанности" произведения Borland, с другой)?
PVOzerski (2003-06-05 12:53:00) [45]Еще кое-что.
Теперь касательно BASM.
По умолчанию FPC использует синтаксис AT&T, но при использовании директивы компилятора {$asmmode INTEL} пытается (не без глючков) понимать синтаксис, принятый в Delphi. Однако есть еще "но". Как я помню, в KOL в BASM-вставках принято смело лезть в регистры, полагая, что туда помещены параметры функций. Так вот, FPC пока не поддерживает соглашение register при передаче параметров, а по умолчанию использует несколько упрощенный stdcall. Просьба об этом не забывать.
savva (2003-06-05 12:28:00) [46]
http://bonanzas.rinet.ru/ppDelphi.zip
PVOzerski (2003-06-05 12:08:00) [47]
Взялся и я потихоньку сам играть с KOL под FPC. Сразу же возникли пожелание и вопросы. Пожелание: сделайте, пожалуйста, конвертер KOL2FPC хотя бы консольным, а то его не видно нигде, кроме Task Manager/Processes - неудобно. Я из-под Far"а его запустил и поначалу решил, что он (KOL2FPC) сдох. Вопрос: 1) Откуда брать модули RichEdit (просто не знаю) и MMSystem (я взял из Packages от FPC - мною и сделанный)?
savva (2003-06-05 11:54:00) [48]
> Кладов (05.06.03 11:39)
> а по имени - не может, что ли? Может тогда надо и имя, и
> номер указывать ( но как, я не знаю? )
но тут проблема другого плана:)) стандартная оболочка не линкует этот файл ресурсов, а Dev-Pas - линкует... почему - не знаю...
PVOzerski (2003-06-05 11:41:00) [49]
Штука в том, что link.res и testKOL4.res - принципиально разные вещи, несмотря на то, что расширения у них совпадают :^( . Link.res - это т.н. linker response file, по сути дела - скрипт, интерпретируемый линкером и содержащий, гл.обр., список обьектных файлов и библиотек, подлежащих линковке, притом в текстовом виде, а вовсе не скомпилированный файл ресурсов.
Кладов (2003-06-05 11:39:00) [50]
а по имени - не может, что ли? Может тогда надо и имя, и номер указывать ( но как, я не знаю? )
savva (2003-06-05 11:35:00) [51]
оболочка Dev-Pas все делает нормально. правла rc файл имеет вид
500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "C:/pp/demo/KOL/testKOL4.ico"
и компилируется он строкой
C:\PP\BIN\WIN32\windres --include-dir C:\pp\KOL\FPC\ --include-dir --include-dir --include-dir C:\PP\Kol\ -I rc -O coff -i C:\pp\demo\KOL\testKOL4_FPC.rc -o C:\pp\demo\KOL\testKOL4_FPC.o --preprocessor C:\pp\bin\win32\cpp.exe
надо еще поглдеть, но пока занят.. будут результаты - скажу..
Кладов (2003-06-04 22:00:00) [52]
Я еще немного помурыжил, вернулся на версию 1.0.5, сделал для нее совместимость, потом снова на 1.0.6, вроде ничего не сломалось, и заодно убедился, что ресурсы не подключались и в версии 1.0.5. Не срабатывает командная строка:
windres.exe --include -O coff -o c:\pp\projects\test2\testkol4.owr testkol4.res
В версии 1.0.5 вообще баг:
c:\pp\bin\win32\ldw.exe --subsystem windows -b base.$$$ -o c:\pp\projects\test2\testkol4.exe link.res
после чего ldw уныло сообщает, что файл link.res не найден. Если руками поправить ppas.bat и заменить link.res на testkol4.res, то результат тот же, что и в 1.0.6: формат файла ресурсов не опознан. Замечательный результат. Описание windres.exe крайне скудное, если кто найдет, как ему выправить мозги, милости прошу.
Версия 1.75 готова, выКЛАДЫВаю :)
Кладов (2003-06-04 19:34:00) [53]
А ларчик просто открывался: ресурсы не понимает, причем не только изготовленные Borland Image Editor, но и сделанные windres-ом из поставки pp в соответствии с их собственным примером. Пока отключил, потом будем разбираться, как тот же битмап или иконку в ресурс загнать, чтобы FPC его принял.
Были еще непонятки с переменными типа указатель на метод: кастить тип fpc не желает, а другого легального способа получить доступ к полям Code и Data я не нашел. Пришлось через asm-вставки. Все 4 старых проекта testKOLN после некоторых модификаций работают после компиляции в FPC. Начинаю готовить 1.75.
savva (2003-06-04 16:22:00) [54]
будем ждать..
Кладов (2003-06-04 15:48:00) [55]
Была проблемка с созданием окошек, поправил: надо было в _NewWindowed вызывать конструктор CreateParented( AParent ), а не просто Create. Но вот странная вещь: дошел до TestKOL3, а мне вываливает error while linking, и не говорит, какой error. Сейчас буду смотреть, как получить этот error. К ночи, надеюсь, будет готова версия 1.75 для публикации - уже с конвертацией в FPC-совместимый KOL с классами.
Кладов (2003-06-04 09:23:00) [56]
Попробовал Bounds Checker и TDW32 от BC++4.5. BChk не находит исходники, TDW символьную информация, хотя она есть. Родной IDE от FPC не находит переменные, окно watches беспоолезно, пишет (incomplete type), this не aggregate type, ну и всякое такое. Придется старым дедовским способом - через логи, это дольше :(
Кстати, если APPTYPE GUI прямо в исходник не вставить, открывается консоль, ее видно при запуске из под BChk.
Кладов (2003-06-03 22:43:00) [57]
Да еще, обратите внимание: в новой версии KOL2FPC создается в поддиректории FPC (создается сама) файл с таким же именем - KOL.PAS. Решил так, потому что не нашел в FreePas подмены имен мудулей, как в Delphi. Если добьемся совместимости, то меньше будет проблем с переделкой проектов под FPC (точнее, вообще ничего не придется переделывать - идеальная совместимость, только путь правильно прописать).
Спокойной ночи :)
Кладов (2003-06-03 22:31:00) [58]
> 1.75 or higher
Пока вполне пойдет 1.74+, полученный из GotoFPC.
Инструкция в KOL2FPC с расчетом на будущее, настоящяя инструкция в GotoFPC.
test1 работает, пробую TestKOL.dpr. Окно создается, но его почему-то не видно (размеры не устанавливаются, что ли, не пойму пока). Свой отладчик у FPC не показывает значения переменных, нужен сторонний отладчик, завтра займусь.
Пока выкладываю что есть: KOL2FPC, GotoFPC обновлены. Не забудьте поправочку сделать в mmsystem (см. выше по нитке).
Кладов (2003-06-03 21:25:00) [59]
> на самом деле это две взаимоисключающие опции.
> 1-я эквивалентна {$mode objfpc}, 2-я - {$mode Delphi}.
зачем же тогда в опциях используются чек-боксы, трудно что ли было как-то их в радиогруппу вложенную засунуть.
Кладов (2003-06-03 21:22:00) [60]
TabControl перегнал, все компилируется, но проблема с ассемблером - совсем другие соглашения по передаче параметров. Некоторые функции у меня имеют только ассемблерную версию кода, срочно приходится изобретать для них паскаль-код.