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

Вниз

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 вся ветка

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

Наверх




Память: 0.52 MB
Время: 0.016 c
2-1211234395
deras
2008-05-20 01:59
2008.06.15
Как установить в DBLookupComboBox1 выбраной по умолч. 1-ю запись?


2-1211448845
StiTch
2008-05-22 13:34
2008.06.15
Сумма


2-1211279284
StiTch
2008-05-20 14:28
2008.06.15
Вкладки


2-1211270505
RR Bom
2008-05-20 12:01
2008.06.15
DBGrid1


2-1211399141
dumnsar
2008-05-21 23:45
2008.06.15
Драг дроп