Форум: "KOL";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];
ВнизKOL и FreePascal Найти похожие ветки
← →
_vadim (2007-09-16 15:39) [0]Пытаюсь откомпилировать KOL 2.79 во FreePascal, но получаю такую ошибку:
Unexpected end of file.
Не подскажите, в чём может быть проблема.
FreePascal 2.2.
← →
Yury Sidorov (2007-09-17 13:29) [1]Используй KOL-CE.
← →
vampir_infernal (2007-09-17 14:21) [2]Скорее всего, что-то напутали с директивами условной компиляции
← →
Yury Sidorov (2007-09-17 15:55) [3]Основная ветка KOL не будет работать правильно с FPC. Освобождение объектов для FPC нужно делать не так как для Delphi.
Простейшие примеры работать будут, а вот что-то посложднее уже будет валиться...
← →
Galkov © (2007-09-17 17:09) [4]
> Освобождение объектов для FPC нужно делать не так как для Delphi
Очень информативно, однако.
И многообещающе :)
Нельзя ли с этого места по-подробнее ???
← →
_vadim (2007-09-17 18:35) [5]Единственное условие компиляции, которое я там увидел, это {$DEFINE _FPC}.
В readme только вскольз упоминается, что KOL работает с FreePascal 1.0.5, 2.0.4 и выше. Вот только как компилировать - ни слова. Так что путаться можно до потери пульса.
Может быть кто-то уже путался и успешно из этого дела выпутался? Подскажите, будте добры.
← →
ZiTRaX © (2007-09-17 19:30) [6]У меня в fpc.cfg созданы такие "типа-условия" (версия FPC - 2.2.0, KOL - 2.79):
#IFDEF KOL_RELEASE
-Og1p2
-Xs
-Mdelphi
-CX
-Sg
-dFPC21
-dKOL_MCK
-dPAS_VERSION
#WRITE Compiling KOL Release Version
#ENDIF
...
#IFDEF KOL_DEBUG
-gcl
-Crtoi
-Sg
-Sa
-Mdelphi
-dFPC21
-dKOL_MCK
-dPAS_VERSION
#WRITE Compiling KOL Debug Version
#ENDIF
Ну и, соответственно, компилю так:fpc -dKOL_RELEASE(или KOL_DEBUG) имя_файла
.
Все юниты используются из стандартной поставки FPC. Простенькие примеры компилятся нормально, а чё-нить посложнее уже не хотит - выдаёт что-то типа такого:E:\Programming\FPC\kolforfpc\kol_mck_2_54\zip\MPEGPlay>fpc -dKOL_RELEASE KOLMp3P
layer.dpr
Compiling KOL Release Version
Free Pascal Compiler version 2.2.0 [2007/09/09] for i386
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: Win32 for i386
Compiling KOLMp3Player.dpr
Compiling KOLMP3player1.pas
Compiling E:\Programming\FPC\dev-pascal\units\kol_mck_279\err.pas
err.pas(479,22) Error: Identifier not found "EnumResourceModules"
err.pas(479,51) Error: Illegal expression
err.pas(545,35) Error: Identifier not found "FindResourceHInstance"
err.pas(546,32) Error: Illegal qualifier
err.pas(549,38) Warning: Local variable "Fmt" does not seem to be initialized
err.pas(579,31) Warning: Use of -offset(%ebp) is not recommended for local varia
ble access
err.pas(777,17) Error: Unknown identifier "SYSTEM.RAISEEXCEPT"
err.pas(777,17) Error: Assembler syntax error
err.pas(922,73) Warning: Procedure type "FAR" ignored
err.pas(944,17) Error: Identifier not found "ExceptClsProc"
err.pas(1079,24) Error: Identifier not found "PLibModule"
err.pas(1079,24) Error: Error in type definition
err.pas(1087,31) Error: Identifier not found "LibModuleList"
err.pas(1088,21) Error: Operator is not overloaded
err.pas(1090,23) Error: Illegal qualifier
err.pas(1090,23) Error: Expression type must be class or record type
err.pas(1092,48) Error: Identifier not found "Instance"
err.pas(1092,71) Error: Identifier not found "Instance"
err.pas(1096,30) Error: Illegal qualifier
err.pas(1187) Fatal: There were 16 errors compiling module, stopping
Fatal: Compilation aborted
Так что либо напильником допиливать, либо всё-таки использовать Delphi для KOL :-) .
← →
ANTPro © (2007-09-17 20:06) [7][1],[3] прочитать не всилах?
← →
Thaddy (2007-09-17 20:29) [8]Goto line 310 in kol.pas
Add:
{$IFDEF VER2}
}
{$ENDIF}
That helps!
← →
ZiTRaX © (2007-09-17 21:45) [9]to ANTPro [7]: если это было мне, то:
а) с использованием KOL CE ничего не изменилось (только вместо 16 ошибок стало 14 ;-) );
б) а про [3] я и так догадался/знал - просто вывод консоли в качестве примера привёл.
to Thaddy [8]: and what I need to add?
← →
Galkov © (2007-09-17 22:41) [10]Встречное утверждение: Пытаюсь откомпилировать KOL 2.79 во FreePascal 2.04 - и не имею проблем.
Не изощряясь c дефайнами - мне показалось, что Thaddy давно и о многом позаботился.
Вопрос: что я делаю не так, и при чем здесь KOL, мягко говоря ???
Про err.pas - не говорю, это отдельная и не простая песня.
С мотивом которой, разобраться обещал Yury Sidorov, если мне не изменяет память...
2Thaddy: I don"t undestand your recomendation :shock:
Is it possible to explain this more minutely ???
← →
Yury Sidorov (2007-09-18 12:04) [11]
> > Освобождение объектов для FPC нужно делать не так как
> для Delphi
>
> Очень информативно, однако.
> И многообещающе :)
>
> Нельзя ли с этого места по-подробнее ???
Подробности:
Дельфи при вызове Dispose для объекта с деструктором генерит вызов деструктора, а затем вызов Dispose для освобождения памяти. Поэтому при желании можно вызывать деструктор отдельно и отдельно освободить память, что KOL и делает.
FPC в таком случае вызывает только деструктор, который и освобождает память. Поэтому отдельно вызвать деструктор и отдельно освободить память нельзя.
Вот в этом и отличие. И если использовать основную ветку KOL с FPC, то при освобождении объектов память будет освобождаться дважды, что приведет к ошибке и краху программы.
← →
Galkov © (2007-09-18 14:07) [12]
> что KOL и делает.
Пальцем покажите, пожалуйста.
> И если использовать основную ветку KOL с FPC, то при освобождении
> объектов память будет освобождаться дважды, что приведет
> к ошибке и краху программы
Примерчик не приведете ???
А то у меня как-то не получается првести к краху.
← →
Yury Sidorov (2007-09-18 16:00) [13]смотри в destructor TObj.Destroy на FreeMem( @ Self ) и читай мой предыдущий пост.
← →
Galkov © (2007-09-18 18:01) [14]
> смотри в destructor TObj.Destroy
Ага, увидел - спасибо
Но возникает следующий вопрос: с какой версии FPC это начинается ???
Если знаете.
Ибо под 2.04 проблем не вижу...
Ну, чтобы не напрягаться понапрасну с обновлением сего замечательного продукта....
← →
Yury Sidorov (2007-09-18 19:26) [15]В 2.0.х поведение такое же.
Скомпили программу с ключиком -gh и посмотри что напишет при выходе.
← →
thaddy (2007-09-18 20:42) [16]There really is a parsing issue with fpc 2.2 and kol 2.79:
In delphi everything is ok, but in FPC there is a missing right-bracket ("}") at line 310 in kol.pas.
So, in order to get it working add:
{$IFDEF VER2} //FPC 2+
}
{$ENDIF}
btw: the reason I am not so active is a lot of work. I wish it were different...
← →
Galkov © (2007-09-18 21:38) [17]2Yury Sidorov
Скомпилил. Ничего криминального не увидел.
А что должен был ???
btw: Лазарь у меня не стоит, мне нервы дороже :)
В принципе, ситуация действительно немного криминальная, в моем понимании.
Мне представляется, что никакой компилятор не будет гарантировать "не штатное" завершение в деструкторе. Оно им надо...
Эдак на грабли можно наступить и на очедной версии Дельфи...
Поскольку мне не очень понятна цель этих хитростей (чем например был плох штатный inherited вместо FreeMem):destructor TObj.Destroy;
begin
Final;
FreeMem( @ Self );
end;
- интересно послушать Владимира
Типа: откройте глаза, пожалуйста.
Но беспокоить бога по пустякам - не дело, однако.
Логично начинать разговор с примера в десяток строк: здесь - работает, а здесь - нет.
Ибо слова - они слова прежде всего и есть.
А мне такой пример пока неизвестен :(
2thaddy
I don"t undestand you still !!!
I was included your fragment, and have error message as result:
> kol.pas(311,1) Fatal: illegal character ""}"" ($7D)
> kol.pas(5,18) Fatal: Compilation aborted
And I have no error in original KOL, accordingly
At FPC 2.0.4 (VER2 is defined, as you see)
← →
Yury Sidorov (2007-09-19 13:10) [18]Скомпилируй такой код с ключиком -gh и запусти прогу:
type
PMyObj = ^TMyObj;
TMyObj = object
public
constructor Init;
destructor Destroy;
end;
destructor TMyObj.Destroy;
begin
FreeMem(@Self);
end;
constructor TMyObj.Init;
begin
end;
var
O: PMyObj;
begin
New(O, Init);
Dispose(O, Destroy);
end.
FreeMem в деструкторе TObj.Destroy сделан для того, чтобы объект можно было освободить просто вызовом деструктора. Как для случая с классами.
В FPC это и так можно сделать, без FreeMem, т.к. код для деструктора объектов и классов генерится одинаковый.
← →
_vadim (2007-09-19 13:43) [19]To Galkov:
Проще будет убрать вот из этой строки:
sequence of {$DEFINE ... directives.
символ "{" вместо того, что советует Thaddy. FPC довольно строго, в отличие от Дельфи, подходит даже к символам комментария. :)
← →
_vadim (2007-09-19 13:44) [20]To Galkov:
Это в файле kol.pas.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.007 c