Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
14-94165
Макс Реалов
2004-02-03 18:23
2004.02.29
В чём разница?


7-94202
smu
2003-12-11 11:39
2004.02.29
Что делает WaitForSingleObject(ProcInfo.hProcess, INFINITE)?


1-94010
Кен
2004-02-16 05:03
2004.02.29
Как удалить пустоты в большом массиве ?


1-93966
Aleksandr
2004-02-17 14:33
2004.02.29
Скажите, а есть компоненты для показа Флэш-баннеров?


1-93848
TEXHAPb
2004-02-16 17:28
2004.02.29
Как создать объект того же класса в методе родителя?