Текущий архив: 2004.02.29;
Скачать: CL | DM;
Вниз
KOL2FPC Найти похожие ветки
← →
Кладов (2003-05-30 19:04) [0]Ну вот, первый шажок сделан: утилиту 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
← →
alex_s (2003-05-31 04:09) [1]прошу прощения за серость, и отсталость от времени, но что такое
FPC ? :-)
← →
alex_s (2003-05-31 04:19) [2]О, я понял, что речь идет о Free Pascal. Кстати, чтобы
долго не морочиться можно заменить object на class. Заодно
и наследование появится :-)
← →
Кладов (2003-05-31 08:19) [3]там так и сделано. Но не ради наследования (а как опыт показал, для программирования наследование не нужно), а ради совместимости с FPC, который с object плохо работает.
← →
Кладов (2003-05-31 09:47) [4]Побольше немного добавлено. Посмотреть можно там же - обновил оба архивчика.
Теперь возникает подозрение, что FPC не понимает smart-linking на уровне по крайней мере процедур, и только модулями отбрасывает и/или классами. Размер экзешника увеличился после добавления пары классов и некоторого количества процедур и функций до 116К. Хотя может это я что-то с опциями компилятора намудрил. Кстати, насчет опций. Они что, в экзешнике хранятся? (Если удалить экзешник из проводника, то компилятор тут же забывает, где kolfpc.pas. Забавно получается).
Богуслав, или кто разбирался с FPC, помо жите разобраться насчет смарт-линкинга, пожалуйста. Вопрос важный: KOL весь строится на том, что лишние методы не будут вставлены в код программы, поэтому можно тип TControl раздувать до бесконечности. Если для FPC это не так, то там нужен совсем другой подход, и меня это не устраивает.
← →
Кладов (2003-05-31 12:45) [5]Я вот думаю, не сделать ли свой компилятор с паскаля. Можно было бы
попробовать сделать его как двух-шаговый
Pascal->P-cod(Goodwell)[->assembler]->...->exe, тогда часть
P-cod->...->exe пригодилась бы для гудвела, да и часть Pascal->P-cod
можно было бы включить в гудвел как плагин, понимающий чистый
Паскаль. Паскаль очень простой язык для компиляции, в свое время я
делал работающий компилятор подмножества С в подобие П-кода (то, что
он работал, знаю на 100%, т.к. у меня был интерпретатор П-кода, и
программа работала в таком виде на СМке на реальном производстве), так
что проблем с написанием компилятора в П-код с Паскаля особых нет. П-код в
ассемблер тоже в принципе решабельно, даже какие-то оптимизации можно
сделать, по размеру и по скорости. А дальше доверить работу тому же TAsm"у и TLink"у, на первое время.
← →
SPeller © (2003-05-31 20:17) [6]Почему бы нет? Может, тогда этот компилятор ещё и в Дельфи сунуть удастся? В таком случае вообще прекрасно будет - отличная среда + свой компилятор! :)
← →
SPeller © (2003-05-31 20:23) [7]Отладчик вот только Дельфийский, интересно, как к этому отнесётся?
← →
Кладов (2003-05-31 21:10) [8]
> Может, тогда этот компилятор ещё и в Дельфи сунуть удастся?
>
это еще как? Delphi понимает только свой собственный dcu, на худой конец obj, но тогда его отладчик бесполезен. Есть множество отладчиков. И потом, зачем это, отлаживать можно и под Delphi, а потом просто перекомпилировать своим компилятором, в том числе для linux.
← →
SPeller © (2003-06-01 04:12) [9]
> Delphi понимает только свой собственный dcu
Заставить наш компилятор делать Дельфийские dcu-шки :)
← →
Кладов (2003-06-01 06:07) [10]нереально
← →
Кладов (2003-06-01 08:14) [11]Попробовал FPV 1.0.6 (до этого был 1.0.5). Вообще не компилирует:
Error: Signal Segmentation violation during compilation
Error: Long jumped out of compilation...
Вдруг перестал компилировать директиву Absolute, только с ее помощью мне в прошлой версии удалось обойти непонятки приведения типа TMethod( TProcOfObj ). В этот раз только ассемблерная вставка помогла. Но компиляция все равно оказалась невозможна, в прошлый раз хоть что-то компилировалось.
Я все больше склоняюсь к тому, чтобы сделать свой компилятор, и не зависеть более от произвола сторонних компилятор-делателей. И не выкачивать по 18 мегабайт дистрибутивов этих компиляторов. Кстати, если уж они поставляются в виде исходников (FPC), то обновления могли бы использовать для бедных скачивателей, у которых такой объем скачки - это подвиг и событие недельной важности.
← →
Кладов (2003-06-01 13:15) [12]
> Signal Segmentation
от этого я ушел, удалив промежуточные файлы, которые остались от предыдущей версии. Сейчас пытаюсь добавить очередную порцию кода в KOLFPC.PAS и сравнить размер экзешника - под FPC 1.0.6. Если получится, то имеет смысл добиться все-таки генерации KOLFPC.PAS, все-таки какой-то шаг в сторону многоплатформенности.
Кстати, после stripw экзешник сокращается до 45К. Уже легче (хотя вроде и так все опции в компиляторе таковы, чтобы не включать ничего лишнего). Возможно, разница в размере при добавлении кода в kolfpc.pas устраняется таким способом.
← →
Кладов (2003-06-01 14:43) [13]Код уменьшается только если директиву {$SMARTLINK ON} вставить в сам KOLFPC.PAS. И теперь exe-файл 26,5К (!), даже несмотря на то, что еще один класс добавился и куча функций и процедур. Я сейчас же обновлю архивчик GotoFPC (адрес в начале этой нитки), и на всякий случай KOL2FTP. Внимание: теперь для FPC 1.0.6, на более ранних не проверял.
← →
Кладов (2003-06-02 07:29) [14]Ну что, никто кроме Богуслава не пробовал посмотреть? Я на всякий случай положил на свой сайт архив с файлами для обеспечения совместимости с Delphi. Смотреть в разделе Инструменты (Tools), там и все остальные архивы для KOL2FPC.
← →
savva © (2003-06-02 10:51) [15]Владимир, а Вы бы представили публике тот модулбь который вы сделали - а то я например, никак не могу скопмилить тестовое приложение, ругается на строку
var Global_Synchronized: procedure( Sender: PObj; Param: Pointer ) = DummyObjProcParam;
словами
2100 / 68 kolfpc.pas
Fatal: Syntax error, ; expected but = found
но я думаю - что это не последнее чем он может возмутиться..
← →
savva © (2003-06-02 11:04) [16]и еще - Владимир, а сколько часов в сутки Вы спите (речь не идет о минутах :)) ?
← →
savva © (2003-06-02 11:53) [17]кое как скомпилировал, но... размер приложения 349 Кб :))) это не есть ГУД..
какие у вас опции компилятора?
← →
Gandalf © (2003-06-02 11:55) [18]Закачал все это добро - выздровлю посмотрю. Я вот еще по поводу классов, все же может перевести КОЛ на классы вместо объектов? Я вообщем-то потихоньку начал...
ЗЫ: FPC понимает и смарт-линкинг и много еще чего, только среда плохо настройки сейвит, надо их руками в код вдалбливать, чтобы точно работало.
← →
savva © (2003-06-02 12:05) [19]ну я даже не знаю... у меня под 2000 программа вида
{$DEFINE I386}
{$SMARTLINK ON}
{$APPTYPE GUI}
{$M-}
program Test1;
begin
end.
занимает около 52 Кб..
Владимир, как Вы получили свой результат?
← →
savva © (2003-06-02 12:10) [20]и при таком раскладе установка {$SMARTLINK OFF} дает проигрыша на 1Кб...(что в принципе логично - программа то пустая..) но сам размер...
← →
Gandalf © (2003-06-02 12:30) [21]
> и при таком раскладе установка {$SMARTLINK OFF} дает проигрыша
> на 1Кб...(что в принципе логично - программа то пустая..)
> но сам размер...
Отруби debuginfo и подобный мусор - на крайняк пройдись strip-ом он это все вырежет...
← →
savva © (2003-06-02 12:47) [22]да дело то совсем не в этом...
> Кладов (01.06.03 14:43)
> И теперь exe-файл 26,5К (!), ...
и это при том, что код программы, гораздо более содержателен, чем тот который я ранее приводил:
{$DEFINE I386}
{$SMARTLINK ON}
{$APPTYPE GUI}
{$M-}
program Test1;
uses KOLFPC;
procedure DoTest;
var L: PList;
begin
L := NewList;
L.Add( nil );
L.Free;
end;
begin
DoTest;
end.
кстати, этот код у меня под 2000 работает, а под 98 - нет (просит из WinMM.DLL mciGetDeviceIDFromElementIDA )... и размер у него начиная от 340К..
← →
Кладов (2003-06-02 13:27) [23]
> занимает около 52 Кб..
> Владимир, как Вы получили свой результат?
Сейчас 27Кб, после stripw test1.exe. Некоторое время назад было 26,5К, но видимо, уже какие-то типизированные константы добавились и секция статической линковки увеличилась (чтобы не заморачиваться, я если где вижу, что идет несоответствие с типами параметров API-функции по сравнению с дельфийским windows.pas, просто дублирую описание external функции в KOLFPC.PAS, секция потихоньку увеличивается). Но на самом деле, это мелочь, увеличение на 512 байтов произошло наверное просто потому, что при сборке размер каждой секции округляется до 512 байт. Видимо, так.
Я надеюсь, вы fp.exe пользуетесь? :) Не через командную же строку работать... Хоть какой IDE, но есть.
В принципе, 27К неплохой результат, надо просто верить, что у FPC несколько раздут system.pas, но весь дальнейший рост - целиком на совести библиотеки и самого программиста. Так что если программа размером 100К в Delphi будет 120К в FPC, это совсем мелочь. Главное, что FPC - это большой шанс на развитие в сторону многоплатформенности. И в версии 1.1 кажется есть поддержка object.
Я еше кажется сюда не постил: сейчас лежит обновление от сегодняшнего утра тех двух архивов, и еще я выложил содержимое директории pp\units\win32\Delphi, которой, кажется, нет в дистрибутиве FPC (а она нужна). Все смотреть в tools-Инструменты на основном сайте. Кстати, кому невтерпеж новую версию KOL, то в GotoFPC.zip обновление заодно формирует 1.74+, который уже светится как 1.75.
← →
savva © (2003-06-02 13:32) [24]у меня 340К при компиляции в fp.exe... и с сайта я Вашего уже качал сегодня...
← →
savva © (2003-06-02 13:35) [25]и 52 кб - это совершенно пустое приложение... повторяю просьбу - нет ли у вас возможности представить файл KOLFPC вашей (авторской :))) редакции ?
← →
Кладов (2003-06-02 13:51) [26]а спорим, он байт в байт будет такой же, как тот, что получается после KOL2FPC ? :)
опциями надо порулить, отладку выключить, смарт-линк включить, ну и т.д.
← →
savva © (2003-06-02 14:47) [27]> Кладов (02.06.03 13:51)
> а спорим, он байт в байт будет такой же, как тот, что получается после KOL2FPC ? :)
может быть:)) тогда может Вы опишите основные моменты, на которые следует уделить?:)) а то я что то прикинул сколько комбинаций может быть - у меня нету стока времени:))
и интересно, почему под 98 не работает код..
← →
savva © (2003-06-02 15:10) [28]прогрес:)) уменьшил я размер до 27 648 байт, но под 98 все также не пашет...
← →
savva © (2003-06-02 15:54) [29]кстати, я использую другую IDE http://www.bloodshed.net/devpascal.html - там хоть не досовое окошко...
← →
Boguslaw (2003-06-02 17:49) [30]52kB empty exe - something strange ? When I tested logn time ago with FPC 1.1 empty project EXE should have no more then 13-16 kb !
← →
Кладов (2003-06-02 20:23) [31]Размер может колебаться в зависимости от версии FPC, опций компиляции и сборки, и еще надо применять stripw, чтобы окончательно убрать отладочную информацию, потому что даже если в опциях указано не добавлять, что-то всегда добавляется. Это не суть важно, главное, что появляется возможность компилировать не только в Delphi.
> я использую другую IDE
Что же они пугают, что 8М качать? Оказалось, только 1,1М :)
← →
Кладов (2003-06-02 21:59) [32]Сейчас Test1.exe висит. Пробуйте :
{$DEFINE I386}
{$SMARTLINK ON}
{$APPTYPE GUI}
{$M-}
program Test1;
uses Windows, KOLFPC;
procedure DoTest;
var L: PList;
begin
MsgBox( "Hello, FPC world!", MB_OK or MB_APPLMODAL or MB_SETFOREGROUND );
{L := NewList;
L.Add( nil );
L.Free;}
end;
begin
DoTest;
end.
Насчет того mci... Просто поправьте в mmsystem в pp\...\Delphi - уберите на него ссылки (2 раза по 3 строки). Работает хелло и под 98.
← →
savva © (2003-06-03 10:18) [33]> Кладов (02.06.03 20:23)
> Что же они пугают, что 8М качать? Оказалось, только 1,1М :)
Ну про 8М там сказано если качать всю IDE+FPC..
← →
Кладов (2003-06-03 11:20) [34]Все равно, собственный IDE от FPC хоть и в текстовом режиме, удобнее, если в нем отлаживаться. Это не какой-нибудь GDB, а нормальный борландовского стиля отладчик, из такого когда-то и Delphi вырос. По крайней мере, F8, F7, F4 понимает.
После компиляции с отладочной информацией - без комментирования кода с созданием экземпляра TList - не зависает, отрабатывает нормально (размер 343К-1,5М от опций). После применения stripw к этому экзешнику (26К) тоже работает нормально. При компиляции сразу без отладочной информации (Options|Mode: Normal, размер 27К сразу после сборки) - висит. StripW к такому экзешнику уже не меняет размер, и так же висит.
Попробовал разные режимы, пока нормально получается при таких сочетаниях режимов (по текстовому IDE, пока не смотрел, как это будет на языке ключиков):
Options|Mode: Debug
Options|Linker: (*) Link to smart libraries, прочее выкл.
Options|Debugger: [ ] Strip all debug information generation, т.е. выкл., остальное все равно какое;
ну и для компилятора:
Options|Compiler|Syntax: [X] Delphi 2 extensions on
[X] Allow label and goto (по умолчанию)
[X] Delphi compatibility, прочее выкл. как по умолчанию
Options|Compiler|Code generation:
Run-time check - по усмотрению, у меня все выкл.,
Target Processor - по усмотрению, у меня 386/486,
Optimization - по усмотрению, у меня (*) Generate smaller code, остальное выкл.
Options|Compiler|Assembler: (*) Intel style assembler;
(*) Use pecoff, остальное выкл.
Короче, компилировать с отладочной информацией, потом делать stripw. Возможно, баг FPC.
----------------------------------
Надеюсь сегодня к ночи перегнать TControl, все остальное уже практически компилится с FPC.
← →
savva © (2003-06-03 11:50) [35]> Кладов (03.06.03 11:20)
> Надеюсь сегодня к ночи перегнать TControl, все остальное
> уже практически компилится с FPC.
Будем ждать:)) спасибо за опции, попробую вечером ключики компилятора к этим опциям выснить.
PS. Я поражаюсь Вашей работоспособности:)
← →
PVOzerski © (2003-06-03 16:17) [36]А Вы еще не пробовали добавить {$ifdef FPC} {$mode Delphi} {$endif} в исходники KOL? Не исключаю, что совместимость улучшится.
← →
PVOzerski © (2003-06-03 16:44) [37]Кстати, откуда этот самый указанный в Readme KOL 1.75 or higher взять? На сайте только 1.73 предлагается...
← →
PVOzerski © (2003-06-03 17:11) [38]О {$mode Delphi}:
обратил внимание на Кладов (03.06.03 11:20):
>[X] Delphi 2 extensions on
...
>[X] Delphi compatibility, прочее выкл. как по умолчанию
Комедия в том, что на самом деле это две взаимоисключающие опции.
1-я эквивалентна {$mode objfpc}, 2-я - {$mode Delphi}. Хотя эти режимы компилятора и похожи, но не идентичны (подробнее - см. статью И. Шихалева на fpc.by.ru). И какой из них реально задействуется компилятором в этой ситуации - без экспериментов не разберешься.
← →
Кладов (2003-06-03 21:22) [39]TabControl перегнал, все компилируется, но проблема с ассемблером - совсем другие соглашения по передаче параметров. Некоторые функции у меня имеют только ассемблерную версию кода, срочно приходится изобретать для них паскаль-код.
← →
Кладов (2003-06-03 21:25) [40]
> на самом деле это две взаимоисключающие опции.
> 1-я эквивалентна {$mode objfpc}, 2-я - {$mode Delphi}.
зачем же тогда в опциях используются чек-боксы, трудно что ли было как-то их в радиогруппу вложенную засунуть.
← →
Кладов (2003-06-03 22:31) [41]
> 1.75 or higher
Пока вполне пойдет 1.74+, полученный из GotoFPC.
Инструкция в KOL2FPC с расчетом на будущее, настоящяя инструкция в GotoFPC.
test1 работает, пробую TestKOL.dpr. Окно создается, но его почему-то не видно (размеры не устанавливаются, что ли, не пойму пока). Свой отладчик у FPC не показывает значения переменных, нужен сторонний отладчик, завтра займусь.
Пока выкладываю что есть: KOL2FPC, GotoFPC обновлены. Не забудьте поправочку сделать в mmsystem (см. выше по нитке).
← →
Кладов (2003-06-03 22:43) [42]Да еще, обратите внимание: в новой версии KOL2FPC создается в поддиректории FPC (создается сама) файл с таким же именем - KOL.PAS. Решил так, потому что не нашел в FreePas подмены имен мудулей, как в Delphi. Если добьемся совместимости, то меньше будет проблем с переделкой проектов под FPC (точнее, вообще ничего не придется переделывать - идеальная совместимость, только путь правильно прописать).
Спокойной ночи :)
← →
Кладов (2003-06-04 09:23) [43]Попробовал Bounds Checker и TDW32 от BC++4.5. BChk не находит исходники, TDW символьную информация, хотя она есть. Родной IDE от FPC не находит переменные, окно watches беспоолезно, пишет (incomplete type), this не aggregate type, ну и всякое такое. Придется старым дедовским способом - через логи, это дольше :(
Кстати, если APPTYPE GUI прямо в исходник не вставить, открывается консоль, ее видно при запуске из под BChk.
← →
Кладов (2003-06-04 15:48) [44]Была проблемка с созданием окошек, поправил: надо было в _NewWindowed вызывать конструктор CreateParented( AParent ), а не просто Create. Но вот странная вещь: дошел до TestKOL3, а мне вываливает error while linking, и не говорит, какой error. Сейчас буду смотреть, как получить этот error. К ночи, надеюсь, будет готова версия 1.75 для публикации - уже с конвертацией в FPC-совместимый KOL с классами.
← →
savva © (2003-06-04 16:22) [45]будем ждать..
← →
Кладов (2003-06-04 19:34) [46]А ларчик просто открывался: ресурсы не понимает, причем не только изготовленные Borland Image Editor, но и сделанные windres-ом из поставки pp в соответствии с их собственным примером. Пока отключил, потом будем разбираться, как тот же битмап или иконку в ресурс загнать, чтобы FPC его принял.
Были еще непонятки с переменными типа указатель на метод: кастить тип fpc не желает, а другого легального способа получить доступ к полям Code и Data я не нашел. Пришлось через asm-вставки. Все 4 старых проекта testKOLN после некоторых модификаций работают после компиляции в FPC. Начинаю готовить 1.75.
← →
Кладов (2003-06-04 22:00) [47]Я еще немного помурыжил, вернулся на версию 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 готова, выКЛАДЫВаю :)
← →
savva © (2003-06-05 11:35) [48]оболочка 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-05 11:39) [49]а по имени - не может, что ли? Может тогда надо и имя, и номер указывать ( но как, я не знаю? )
← →
PVOzerski © (2003-06-05 11:41) [50]Штука в том, что link.res и testKOL4.res - принципиально разные вещи, несмотря на то, что расширения у них совпадают :^( . Link.res - это т.н. linker response file, по сути дела - скрипт, интерпретируемый линкером и содержащий, гл.обр., список обьектных файлов и библиотек, подлежащих линковке, притом в текстовом виде, а вовсе не скомпилированный файл ресурсов.
← →
savva © (2003-06-05 11:54) [51]
> Кладов (05.06.03 11:39)
> а по имени - не может, что ли? Может тогда надо и имя, и
> номер указывать ( но как, я не знаю? )
но тут проблема другого плана:)) стандартная оболочка не линкует этот файл ресурсов, а Dev-Pas - линкует... почему - не знаю...
← →
PVOzerski © (2003-06-05 12:08) [52]Взялся и я потихоньку сам играть с KOL под FPC. Сразу же возникли пожелание и вопросы. Пожелание: сделайте, пожалуйста, конвертер KOL2FPC хотя бы консольным, а то его не видно нигде, кроме Task Manager/Processes - неудобно. Я из-под Far"а его запустил и поначалу решил, что он (KOL2FPC) сдох. Вопрос: 1) Откуда брать модули RichEdit (просто не знаю) и MMSystem (я взял из Packages от FPC - мною и сделанный)?
← →
savva © (2003-06-05 12:28) [53]http://bonanzas.rinet.ru/ppDelphi.zip
← →
PVOzerski © (2003-06-05 12:53) [54]Еще кое-что.
Теперь касательно BASM.
По умолчанию FPC использует синтаксис AT&T, но при использовании директивы компилятора {$asmmode INTEL} пытается (не без глючков) понимать синтаксис, принятый в Delphi. Однако есть еще "но". Как я помню, в KOL в BASM-вставках принято смело лезть в регистры, полагая, что туда помещены параметры функций. Так вот, FPC пока не поддерживает соглашение register при передаче параметров, а по умолчанию использует несколько упрощенный stdcall. Просьба об этом не забывать.
← →
PVOzerski © (2003-06-05 12:58) [55]И еще. Дистрибутив FPC содержит свои юниты windows и mmsystem. При этом по меньшей мере юнит windows от FPC не во всех декларациях параметров совпадает с юнитом от Borland. И какой выбираем (с учетом всяких (С), с одной стороны, и большей "вылизанности" произведения Borland, с другой)?
← →
Кладов (2003-06-05 15:23) [56]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К всего. Но примеры бывают разные. Реальное приложение спортирую - посмотрим еще.
← →
Иван Шихалев © (2003-06-06 11:35) [57]Не вижу никаких проблем с ресурсами в FPC.
Компиляция .rc в .res:
windres -i myfile.rc -o myfile.res
Оба файла требуется явно указать с явными расширениями.
Линковка:
{$R myfile.res}
← →
Кладов (2003-06-06 11:51) [58]
> Линковка:
>
> {$R myfile.res}
в какой версии это работает? У меня не работает ни в 1.0.5, ни в 1.0.6
← →
Darts (2003-06-06 12:37) [59]http://www.GoDevTool.com
Я использую freeware gorc.exe для FPC 1.0.6 уже полгода. Никаких отклонений в работе компилятора ресурсов, работает четко и стабильно.
IMHO, windres.exe не всегда корректно работает, во всяком случае в некоторых случаях он не отрабатывал, поэтому я перешел на gorc и сразу забыл про проблемы.
← →
Иван Шихалев © (2003-06-06 13:18) [60]в 1.0.4, 1.0.6, 1.1 - т.е. во всех, с которыми я работал
← →
Кладов (2003-06-06 15:59) [61]тогда вопрос такой: как интегрировать этот gorc в ide так, чтобы программу с уже вставленными ресурсами можно было отлаживать. Или каждый раз собирать вне ide, а потом уже нажимать F8 ?
← →
Darts (2003-06-06 16:15) [62]IMHO, предпочтительнее 2-ой вариант. Запускать можно через Tools из IDE, предварительно настроив через Options-Tolls новую команду, связанную с gorc.exe.
← →
Кладов (2003-06-06 17:53) [63]Но я так понял, что из tools можно что-то запустить, а при нажатии F8 IDE решит, что экзешник обновился, и опять будет его перестраивать? Или нет, и gorc только компилирует ресурс, и а подключается он сам (тогда и в tools засовывать не нужно, достаточно построить ресурс). Надо пробовать, в общем.
Кто как, а я потихоньку начал тянуть с интернета сорцы для LINUX (я надеюсь, правильно понял, что это исходники модулей, которые лягут куда-то вроде pp\units\linux, аналогично pp\units\win32 для Windows).
← →
Кладов (2003-06-06 18:22) [64]Не знаю я, что не так, но и res-файл, собранный windres, и собранный gorc, категрически отказываются линковаться с testKOL4, когда собираю через родное IDE FPC. Пробовал явно поменять имя на {$R testKOL4.res}, в лбом случае Error while linking. Причем, возникает такое ощущение, что FPC IDE каждый раз снова запускает windres для создания ресурса, хотя он уже существует. Может, это как-то можно отключить? Или переключить его на использование gorc? Или windres нужен для линковки res-файла (т.е. он сам добавляет ресур к экзешнику)? Но gorc этого не делает. А почему в ppas.bat в команде вызова windres после ключа --include сразу идет -O coff ? Такое ощущение, что ему бы надо что-то указать... Просьба у кого работает в текстовом IDE сообщить, что надо настроить, чтобы работала сборка из самого IDE, неважно, через windres или gorc.
← →
Darts (2003-06-06 19:11) [65]Должен заметить, что я не работаю в IDE - именно из-за Error while linking и других глюков. Однако, если выйти из IDE и собрать батником - все разрешается благополучно. Я не первый раз сталкивался с этой проблемой, поэтому я отказался от IDE и набиваю тексты в FAR"е, используя помощь Colorer"а.
Это из моего проекта, содержимое life.bat
@echo off
SET THEFILE=Life.exe
echo Linking %THEFILE%
gorc life.rc
if errorlevel 1 goto linkend
ppc386 -Sm -Si -Sh -O3 Life.pas
if errorlevel 1 goto linkend
goto end
:asmend
echo An error occured while assembling %THEFILE%
goto end
:linkend
echo An error occured while linking %THEFILE%
:end
Прикол в том, что это все работает, и все замечательно собирается, а стоит зайти в IDE - появляется ошибка линковки. Проверено неоднократно. Вообще надо заметить, что IDE FPC - штука весьма и весьма ненадежная - имеет тенденецию зависать и выкидывать такие сюрпризы, что диву даешься. Поэтому я все делаю руками. Поэтому попробуйте поплавать ав автономном режиме. Желаю успеха!
← →
Кладов (2003-06-06 20:36) [66]И как отлаживаться? Мы в IDE привыкши :(
← →
Иван Шихалев © (2003-06-06 20:56) [67]
> Не знаю я, что не так, но и res-файл, собранный windres,
> и собранный gorc, категрически отказываются линковаться
> с testKOL4, когда собираю через родное IDE FPC.
Не знаю, IDE не пользовался. Как-то приятней из нормального редактора компилировать.
> Причем, возникает такое ощущение, что FPC IDE каждый раз
> снова запускает windres для создания ресурса, хотя он уже
> существует.
Не совсем - он его запускает, чтобы сделать из .res .owr - нормальный объектный файл формата COFF, который будет уже просто прилинкован к .exe.
← →
Иван Шихалев © (2003-06-06 21:24) [68]Если нужно подключить windres через Tools IDE, то для tools имеем:
+-[_]---------------- Modify/New Tool ---------------------+
¦ ¦
¦ Title ( ) Unassigned ¦
¦ Windres ( ) Shift+F2 ¦
¦ ( ) Shift+F3 ¦
¦ Program path ( ) Shift+F4 ¦
¦ wr.bat ( ) Shift+F5 ¦
¦ ( ) Shift+F6 ¦
¦ Command line ( ) Shift+F7 ¦
¦ $NAME($EDNAME) ( ) Shift+F8 ¦
¦ (*) Shift+F9 ¦
¦ ( ) [68]Если нужно подключить windres через Tools IDE, то для tools имеем:
+-[_]---------------- Modify/New Tool ---------------------+
¦ ¦
¦ Title ( ) Unassigned ¦
¦ Windres ( ) Shift+F2 ¦
¦ ( ) Shift+F3 ¦
¦ Program path ( ) Shift+F4 ¦
¦ wr.bat ( ) Shift+F5 ¦
¦ ( ) Shift+F6 ¦
¦ Command line ( ) Shift+F7 ¦
¦ $NAME($EDNAME) ( ) Shift+F8 ¦
¦ (*) Shift+F9 ¦
¦ ( ) Shift+F10 ¦
¦ ¦
¦ OK _ Cancel _ ¦
¦ ________ ________ ¦
+----------------------------------------------------------+
И батничек:
windres -i %1.rc -o %1.res
← →
Иван Шихалев © (2003-06-06 21:30) [69]Задать командную строку целиком в Tools у меня почему-то не получилось... Получилось задавать только исходный файл, однако тут уже глючит/фичит windres, заявляя, что писать в null не может.
← →
Иван Шихалев © (2003-06-06 21:32) [70]Забыл добавить - когда .res уже имеется компиляция из-под IDE проходит совершенно нормально. Версия 1.0.6.
← →
Кладов (2003-06-07 10:17) [71]Существует. Не линкует, Error while linking. 1.0.6. Не пойму, почему. Может, он в Win2000 работать не хочет.
← →
Иван Шихалев © (2003-06-07 12:57) [72]Ничего не понимаю. Только что проверил под Win2K AdvSrv - все работает.
Есть только одно предположение: когда компилятор пытается вызвать windres для.res -> .owr
, он его попросту не находит. Т.е. стоит проверить PATH.
Еще вариант - бинарники FPC и/или файлы проекта находятся в каталоге с путем, содержащим пробелы.
← →
Кладов (2003-06-07 14:14) [73]нет, пути нормально, и в свойствах окна дос в path добавлен c:\pp\bin\win32
На самом деле, видно разницу, когда оставшийся бат-файл ppas.bat запускать из разных директорий (лежит сам в bin\win32, и остается только после неудачной линковки). Может, с этим связано. Но все равно это баг какой-то, я думаю, с IDE fpc не то что-то.
← →
Иван Шихалев © (2003-06-07 16:14) [74]А из командной строки все нормально?
← →
Кладов (2003-06-07 16:57) [75]из командной строки я не сам работал, я пробовал из-под Dev-Pascal, он тоже делает командные строки, их можно посмотреть, и запустить отдельно, они работают. Но Dev-Pascal не имеет своего отладчика, и потому так же бесполезен для отладки из-под IDE, как и сборка из батника.
← →
Иван Шихалев © (2003-06-07 17:10) [76]Все страннее и странее... Давай About у IDE сравним, что ли...
+-[_]---------- About ---------------+
¦ ¦
¦ FreePascal IDE for Win32 ¦
¦ Version 0.9.2 2002/04/26 ¦
¦ (Compiler Version 1.0.6) ¦
¦ (Debugger GDB 5.1.1) ¦
¦ ( C) [76]Все страннее и странее... Давай About у IDE сравним, что ли...
+-[_]---------- About ---------------+
¦ ¦
¦ FreePascal IDE for Win32 ¦
¦ Version 0.9.2 2002/04/26 ¦
¦ (Compiler Version 1.0.6) ¦
¦ (Debugger GDB 5.1.1) ¦
¦ Copyright (C) 1998-2001 by ¦
¦ ¦
¦ BВrczi Gаbor ¦
¦ Pierre Muller ¦
¦ and ¦
¦ Peter Vreman ¦
¦ ¦
¦ ¦
¦ OK _ ¦
¦ ________ ¦
+------------------------------------+
← →
Кладов (2003-06-07 19:07) [77]До циферки совпадает.
← →
Кладов (2003-06-07 20:25) [78]Тут ведь явный баг IDE: он генерирует команду для windres такую:
windres.exe --include -O coff -o c:\pp\projects\test2\testkol4.owr testkol4.res
и она не выполняется. Если ее попробовать выполнить в командной строке вручную, то windres начинает выводить описание как его правильно использовать, и возвращает errorlevel 1, после чего линкер обламывается.
Достаточно поменять на
windres.exe --include -O coff -o c:\pp\projects\test2\testkol4.owr -i testkol4.res
и это уже работает, линкер идет дальше и подключает res-файл нормально. Я вот что подумал, сейчас попробую... Ага, получилось. Вот такая программка:
program WindRes;
uses
windows, KOL, ShellAPI;
procedure Fake;
var S: String;
I: Integer;
begin
S := CmdLine;
if _StrSatisfy( PChar( TrimRight( S ) ),
"* --include -O coff -o *.owr *.res" ) then
begin
I := pos( " -o ", S );
S := Trim( "--include -O coff -o " + CopyEnd( S, I + 3 ) );
for I := Length( S ) downto 1 do
if S[ I ] = " " then
begin
S := Copy( S, 1, I ) + "-i " + CopyEnd( S, I + 1 );
break;
end;
end;
ShellExecute( 0, nil, PChar( GetStartDir + "windres0.exe" ),
( S ) [78]Тут ведь явный баг IDE: он генерирует команду для windres такую:
windres.exe --include -O coff -o c:\pp\projects\test2\testkol4.owr testkol4.res
и она не выполняется. Если ее попробовать выполнить в командной строке вручную, то windres начинает выводить описание как его правильно использовать, и возвращает errorlevel 1, после чего линкер обламывается.
Достаточно поменять на
windres.exe --include -O coff -o c:\pp\projects\test2\testkol4.owr -i testkol4.res
и это уже работает, линкер идет дальше и подключает res-файл нормально. Я вот что подумал, сейчас попробую... Ага, получилось. Вот такая программка:
program WindRes;
uses
windows, KOL, ShellAPI;
procedure Fake;
var S: String;
I: Integer;
begin
S := CmdLine;
if _StrSatisfy( PChar( TrimRight( S ) ),
"* --include -O coff -o *.owr *.res" ) then
begin
I := pos( " -o ", S );
S := Trim( "--include -O coff -o " + CopyEnd( S, I + 3 ) );
for I := Length( S ) downto 1 do
if S[ I ] = " " then
begin
S := Copy( S, 1, I ) + "-i " + CopyEnd( S, I + 1 );
break;
end;
end;
ShellExecute( 0, nil, PChar( GetStartDir + "windres0.exe" ),
PChar( S ), nil, SW_SHOW );
end;
begin
Fake;
end.
Инструкция такая: pp\bin\win32\windres.exe переименовываем в windres0.exe, бросаем туда новый windres.exe, и вуаля - теперь можно компилировать и отлаживать из-под IDE :)
← →
Кладов (2003-06-07 21:28) [79]Маленько ошибся, owr не создавался с той программкой, только если он уже был, работало. Но нашел как поправить, вроде теперь работает. Положил в GotoFPC.zip, на сайте (смотреть FakeWindRes.zip внутри).
← →
Иван Шихалев © (2003-06-07 22:24) [80]Ну... Заглушка, конечно, очевидная. Однако у меня-то все работает и без нее.
← →
Boguslaw (2003-06-08 03:48) [81]windres.exe --include -O coff -o c:\pp\projects\test2\testkol4.owr testkol4.res
Why -O coff ?
I don"t understand ;-( i think that this way it could"nt be linked using {$R testkol4.res}.
Why not : windres -i testkol4.rc -o testkol4.res ?
This two are different formats I suppose.
← →
Кладов (2003-06-08 05:06) [82]
> Why -O coff ?
> I don"t understand ;-( i think that this way it could"nt
> be linked using {$R testkol4.res}.
> Why not : windres -i testkol4.rc -o testkol4.res ?
Вот и я думаю: чего это IDE такое генерит... Ладно, обманул я его, и пойдет теперь. В GotoFPC как раз теперь простой (второй)вариант, только пути к файлам полностью указаны. Наверное, не будет работать, если в путях есть пробелы. Но это мы уже проходили, дураков нет в названиях директорий пробелы использовать.
← →
Юрий К (2003-06-08 17:45) [83]"Наверное, не будет работать, если в путях есть пробелы."
А если пути заключать в кавычки, то может и с пробелами пройдёт? Или это не из той оперы?
← →
Юрий К (2003-06-08 19:00) [84]Дайте линк, где взять FPC вместе с IDE, никогда не работал ещё с этим, хочу попробовать.
← →
Иван Шихалев © (2003-06-09 07:37) [85]http://www.freepascal.org/download.html
Кавычки не помогут - глюк-с в binutils
← →
PVOzerski © (2003-06-09 11:47) [86]О пробелах и кавычках - а ведь в Винде, как правило, для каждого пути в стиле lfn есть "короткий" эквивалент в стиле DOS.
← →
Иван Шихалев © (2003-06-09 12:15) [87]
> PVOzerski © (09.06.03 11:47)
> О пробелах и кавычках - а ведь в Винде, как правило, для
> каждого пути в стиле lfn есть "короткий" эквивалент в стиле
> DOS.
Угу, только при автоматическом вызове того же ldw из того же ppc386 сей радостный факт игнорируется.
← →
Юрий К (2003-06-09 16:15) [88]http://www.freepascal.org/down-win32.html
Всего там много, что из списка оптимально скачать для нужд программирования (не все же 18.5 MB).
← →
Иван Шихалев © (2003-06-09 17:08) [89]А подумать?
Ладно:
ftp://ftp.freepascal.org/pub/fpc/dist/Win32/separate/basew32.zip
Это вообще ядро - компилятор и RTL.
ftp://ftp.freepascal.org/pub/fpc/dist/Win32/separate/asldw32.zip
Это GNU BinUtils, в том числе ассемблер и компоновщик. Без них работать тоже не будет.
ftp://ftp.freepascal.org/pub/fpc/dist/Win32/separate/idew32.zip
Это - IDE. Нафиг нужно, но ты хотел с ним.
И еще - документация:
ftp://ftp.freepascal.org/pub/fpc/dist/Win32/separate/docs-pdf.zip
ftp://ftp.freepascal.org/pub/fpc/dist/Win32/separate/doc-html.zip
Причем, вторая HTML версия включает в себя вариант для встроенной справки IDE.
← →
Иван Шихалев © (2003-06-09 17:13) [90]Господа, давайте то, что к KOL не относится, но относится к Free Pascal, обсуждать на http://fpc.by.ru/
← →
BaRToV (2003-06-09 17:16) [91]А stripw в каком архиве лежит?!..
← →
Юрий К (2003-06-09 17:22) [92]Спасибо за линки.
" подумать?"
Не всё, что приходит на ум при первом взгляде, будет правильным.
Линк ftp://ftp.freepascal.org/pub/fpc/dist/Win32/separate/install.exe не указан, а вроде бы кажется, что тоже нужно скачивать. Для чего нужен install.exe, всё-таки первым в списке стоит?
← →
Иван Шихалев © (2003-06-09 17:34) [93]Чтобы ручками не распаковываать скачиваемые архивы. Надеюсь, сие не есть большая проблема?
Тем более, что PATH, например, install.exe тоже не пропишет... Ручками, все ручками, увы :(
← →
Darts (2003-06-09 17:36) [94]> BaRToV (09.06.03 17:16)
asldw32.zip
← →
Кладов (2003-06-09 20:33) [95]На самом деле, труд по переводу под FPC только начался. На данный момент, не удалось :
1. Разобраться с функцией Format, как ее правильно оформить для FPC, чтобы компиляция происходила нормально. Просто некогда было разбираться, пока выключил для FPC\KOL.
2. Пришлось отказаться пока от той части кода, которая работает с WideString: FPC постоянно ставится в тупик по поводу того, какую overload-функцию вызывать, по крайней мере, он так пишет. На самом деле, эта часть очень важна для поддержки Unicode, и без нее невозможно начинать программировать для WinCE, используя KOL + FPC. А хотелось бы, наверное.
Может, еще что забыл...
Про LINUIX.
Для программирования альтернативных участков кода я планирую следующий подход:
- KOL.PAS отстается как есть в интерфейсной части;
- В части implementation логически связные группы фунций/методов (например, группа работы с файлами) обрамляются таким образом:
{$IFDEF KOLLINUX}
... здесь всё то, что и было - реализация функций для работы с файлами ...
{#Include[KOLLinux_Files.inc]}
{$ELSE KOLWIN32}
{$ENDIF KOLLINUX/KOLWIN32}
- Реализация файловых функций для Linux выносится в KOLLinux_Files.inc, но после выполнения KOL2FPC мы получаем слитный файл FPC\KOL.PAS, в котором этот файл вставлен непосредственно вместо директивы{#Include}
. Чтобы при этом удалилась одновременно и та часть кода, которая специфична для win32, достаточно имеющихся команд KOL2FPC. Один раз добавить:
{#If[LINUXONLY]}
{#SkipBetween[$ELSE KOLWIN32][$ENDIF KOLLINUX/KOLWIN32]}
{#Replace[$IFDEF KOLLINUX][]}
{#End}
и запускать KOL2FPC с опцией/D:LINUXONLY
Замечу, что иметь слитный файл очень полезно (нет, просто необходимо) для использования отладчиков и экспертных систем. Ни один из них не умеет найти строки программы, лежащие в inc-файлах.
Вопрос , кто специалист:
Вот я утянул с и-нета пакет 11М для Win32, а теперь хочу еще и для DOS (просто DOS, без Go32v). Собственно вопрос: что мне надо тянуть теперь с freepascal.org, чтобы не снова 11М ? (Или оно у меня уже все есть, и мне надо просто глаза пошире разуть?) :)
← →
Иван Шихалев © (2003-06-09 21:03) [96]1. Не понял, в чем проблемы с Format? Я что-то не заметил отличий от Delphi.
2. Unicode пока в стадии разработки. Если не править RTL самостоятельно, то ...
3. Free Pascal - полностью 32-битный компилятор, то есть какой-нибудь DOS-расширитель (extender) все равно нужен. Можно использовать любой, но - с помощью напильника, кувалды и какой-то матери. В виде готового дистрибутива есть только вариант с Go32v2. Какие причины его не использовать? Кроме того, можно попробовать компилировать под него из-под Win32. Но думаю, что будет нехватать некоторых объектных файлов из RTL.
← →
PVOzerski © (2003-06-10 12:20) [97]Касательно экстендеров для FPC - сейчас он поддерживает Go32 v.2 и EMX, а версия 1.1 - еще (ограниченно) WDOSX (хотя его - только последнюю версию!) можно использовать и с 1.0.x через конверсию win32-программы. А уж "чистый" DOS - чего нет, того нет...
← →
kP^ (2003-06-13 17:05) [98]I followed the instructions added to compile MCK projects using Free Pascal Compiler, but i get this error message (in both FPC IDE or Delphi with apropriate directives):
unit1.pas(18,32) Error: Identifier not found TFORM1,
right at the start, here:
type
{$IFDEF KOL_MCK}
{$I MCKfakeClasses.inc}
{$IFDEF KOLCLASSES} PForm1 = TForm1{!*!}; {$ELSE OBJECTS} PForm1 = ^TForm1;
what"s wrong?
also, MMSYSYEM is always linked in the exe, is there a way to exclude it ?
(answer in english, please)
Страницы: 1 2 3 вся ветка
Текущий архив: 2004.02.29;
Скачать: CL | DM;
Память: 0.77 MB
Время: 0.023 c