Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

KOL2FPC


Страницы:   1 2 3 4 5

Кладов ©   (2003-05-30 19:04:00) 

Ну вот, первый шажок сделан: утилиту KOL2FPC я сделал, какое-то количество кода поправил, теперь формируется минимальный KOLFPC.PAS, в нем пока только TObj и TList, и это уже компилируется под FPC и даже кажется выполняется (для Windows пока). Кому интересно посмотреть, я выкладываю утилиту KOL2FPC, а так же архивчик GotoFPC.zip, там обновление для kol.pas от версии 1.74 (именно к обновленной версии и нужно применять KOL2FPC.exe, чтобы получился KOLFPC.PAS), и пример приложения (тьфу, какого приложения! программы), которое умеет так пока мало... но занимает 83,5К даже после удаления отладочной информации :) Ну, лиха беда начало, дойдут руки - мы и системные модули в FPC поменяем, чтобы добиться хотя бы в районе 40К минимальную прогу делать.

ссылки: http://bonanzas.rinet.ru/KOL2FPC.zip
http://bonanzas.rinet.ru/GotoFPC.zip


Кладов   (2003-06-07 20:25:00) [21]

Тут ведь явный баг 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 -itestkol4.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 -itestkol4.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 19:07:00) [22]

До циферки совпадает.


Иван Шихалев   (2003-06-07 17:10:00) [23]

Все страннее и странее... Давай 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 16:57:00) [24]

из командной строки я не сам работал, я пробовал из-под Dev-Pascal, он тоже делает командные строки, их можно посмотреть, и запустить отдельно, они работают. Но Dev-Pascal не имеет своего отладчика, и потому так же бесполезен для отладки из-под IDE, как и сборка из батника.


Иван Шихалев   (2003-06-07 16:14:00) [25]

А из командной строки все нормально?


Кладов   (2003-06-07 14:14:00) [26]

нет, пути нормально, и в свойствах окна дос в path добавлен c:\pp\bin\win32

На самом деле, видно разницу, когда оставшийся бат-файл ppas.bat запускать из разных директорий (лежит сам в bin\win32, и остается только после неудачной линковки). Может, с этим связано. Но все равно это баг какой-то, я думаю, с IDE fpc не то что-то.


Иван Шихалев   (2003-06-07 12:57:00) [27]

Ничего не понимаю. Только что проверил под Win2K AdvSrv - все работает.

Есть только одно предположение: когда компилятор пытается вызвать windres для .res -> .owr, он его попросту не находит. Т.е. стоит проверить PATH.
Еще вариант - бинарники FPC и/или файлы проекта находятся в каталоге с путем, содержащим пробелы.


Кладов   (2003-06-07 10:17:00) [28]

Существует. Не линкует, Error while linking. 1.0.6. Не пойму, почему. Может, он в Win2000 работать не хочет.


Иван Шихалев   (2003-06-06 21:32:00) [29]

Забыл добавить - когда .res уже имеется компиляция из-под IDE проходит совершенно нормально. Версия 1.0.6.


Иван Шихалев   (2003-06-06 21:30:00) [30]

Задать командную строку целиком в Tools у меня почему-то не получилось... Получилось задавать только исходный файл, однако тут уже глючит/фичит windres, заявляя, что писать в null не может.


Иван Шихалев   (2003-06-06 21:24:00) [31]

Если нужно подключить 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 20:56:00) [32]


> Не знаю я, что не так, но и res-файл, собранный windres,
> и собранный gorc, категрически отказываются линковаться
> с testKOL4, когда собираю через родное IDE FPC.


Не знаю, IDE не пользовался. Как-то приятней из нормального редактора компилировать.


> Причем, возникает такое ощущение, что FPC IDE каждый раз
> снова запускает windres для создания ресурса, хотя он уже
> существует.


Не совсем - он его запускает, чтобы сделать из .res .owr - нормальный объектный файл формата COFF, который будет уже просто прилинкован к .exe.


Кладов   (2003-06-06 20:36:00) [33]

И как отлаживаться? Мы в IDE привыкши :(


Darts   (2003-06-06 19:11:00) [34]

Должен заметить, что я не работаю в 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 18:22:00) [35]

Не знаю я, что не так, но и 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.


Кладов   (2003-06-06 17:53:00) [36]

Но я так понял, что из tools можно что-то запустить, а при нажатии F8 IDE решит, что экзешник обновился, и опять будет его перестраивать? Или нет, и gorc только компилирует ресурс, и а подключается он сам (тогда и в tools засовывать не нужно, достаточно построить ресурс). Надо пробовать, в общем.

Кто как, а я потихоньку начал тянуть с интернета сорцы для LINUX (я надеюсь, правильно понял, что это исходники модулей, которые лягут куда-то вроде pp\units\linux, аналогично pp\units\win32 для Windows).


Darts   (2003-06-06 16:15:00) [37]

IMHO, предпочтительнее 2-ой вариант. Запускать можно через Tools из IDE, предварительно настроив через Options-Tolls новую команду, связанную с gorc.exe.


Кладов   (2003-06-06 15:59:00) [38]

тогда вопрос такой: как интегрировать этот gorc в ide так, чтобы программу с уже вставленными ресурсами можно было отлаживать. Или каждый раз собирать вне ide, а потом уже нажимать F8 ?


Иван Шихалев   (2003-06-06 13:18:00) [39]

в 1.0.4, 1.0.6, 1.1 - т.е. во всех, с которыми я работал


Darts   (2003-06-06 12:37:00) [40]

http://www.GoDevTool.com

Я использую freeware gorc.exe для FPC 1.0.6 уже полгода. Никаких отклонений в работе компилятора ресурсов, работает четко и стабильно.

IMHO, windres.exe не всегда корректно работает, во всяком случае в некоторых случаях он не отрабатывал, поэтому я перешел на gorc и сразу забыл про проблемы.


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо