Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
10-1143016919
ivb2001
2006-03-22 11:41
2008.06.15
Запуск DCOM-сервера клиентом с рабочей станции


2-1211361068
Crookers
2008-05-21 13:11
2008.06.15
Повторяющиеся записи DBGrid


4-1191311204
Tonich
2007-10-02 11:46
2008.06.15
Запуск сервиса


15-1209881696
oldman
2008-05-04 10:14
2008.06.15
Проблема с блоком питания.


2-1211449120
Max
2008-05-22 13:38
2008.06.15
Описание из dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский