Текущий архив: 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