Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.29;
Скачать: CL | DM;

Вниз

KOL2FPC   Найти похожие ветки 

 
Кладов   (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]

Ну... Заглушка, конечно, очевидная. Однако у меня-то все работает и без нее.



Страницы: 1 2 3 вся ветка

Текущий архив: 2004.02.29;
Скачать: CL | DM;

Наверх




Память: 0.65 MB
Время: 0.031 c
6-94089
Silentor
2003-12-24 20:45
2004.02.29
Загрузка ресурсов: blocking vs nonblocking


8-94036
mazepa
2003-10-09 15:22
2004.02.29
Распознавание речи


1-93869
Nobody2004
2004-02-18 14:20
2004.02.29
Глюк DBGrid (или несинхронность указателя и подсветки)


1-94027
PrettyFly
2004-02-16 13:27
2004.02.29
Delphi & Pocket PC


8-94033
Вера
2003-10-29 11:35
2004.02.29
Image