заюзать compilerproc. Из dynarr.inc, например

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

заюзать compilerproc. Из dynarr.inc, например

Сообщение Devil » 10.12.2008 14:41:14

Необходимо реализовать вызов DynArrClear() и FinalizeArray(), которые юзают RTTI.

В Delphi они в принципе доступны, а в FPC таких кункций нет. Но есть модуль System, в нутри которого содержится dynarr.inc и aliases.inc . А там есть похожие функции fpc_dynarray_clear и fpc_finalize_array.

В Лазаре, в "Code Insight" эти функции видны, только не компиляются.

Думаю, ну ладно, compilerproc он не видит, рою дальше. В том же dynarr.inc есть открытая функция DynArraySetLength.

Ну... делаю по аналогии. В dynarrh.inc добавляю объявление моей фунции DynArrayClear, в dynarr.inc делаю реализацию (с вызовом внутренней), пытаюсь вызвать из своего модуля, "Code Insight" его видит нормально, но... опять не компилируется.

Вопрос. Можно ли как-то заюзать compilerproc функции? Если нет, то как перекомпилировать модуль System ?
Devil
новенький
 
Сообщения: 40
Зарегистрирован: 10.12.2008 09:56:33

Re: заюзать compilerproc. Из dynarr.inc, например

Сообщение Sergei I. Gorelkin » 10.12.2008 16:21:48

В общем-то сам смысл существования compilerproc заключается в том, чтобы их нельзя было вызывать как попало...
Внутри самого модуля System используется прием повторного объявления этих ф-ций с атрибутами [public; alias 'NAME'], после чего извне можно вызыать ф-цию, объявленную как external name 'NAME';
Для перекомпиляции модуля System проще всего пересобрать всю rtl и подсмотреть ту команду, которую вызывает make. Хотя сомневаюсь, что его можно вот так взять и перекомпилить независимо от всего остального.

А чем обычный Finalize не устраивает?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: заюзать compilerproc. Из dynarr.inc, например

Сообщение Devil » 10.12.2008 16:47:36

Честно говоря, недопонял.
Так мне можно их заюзать извне или нет ?
P.S. "где тыкнуть" чтобы пересобрать rtl ?

>А чем обычный Finalize не устраивает?
не, это хорошая штука... но мне нужен универсальный способ (с TypeInfo) - активно "балуюсь" RTTI.
Devil
новенький
 
Сообщения: 40
Зарегистрирован: 10.12.2008 09:56:33

Re: заюзать compilerproc. Из dynarr.inc, например

Сообщение Sergei I. Gorelkin » 10.12.2008 17:00:01

Можно только те ф-ции, у которых есть объявление с алиасом. Оно есть не у всех.
Где "тыкнуть", не знаю... Открываешь консоль, набираешь "make"...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: заюзать compilerproc. Из dynarr.inc, например

Сообщение Devil » 10.12.2008 17:09:14

В модуле dynarr.inc функция fpc_dynarray_clear объявлена, только я не могу её вызвать.

procedure fpc_dynarray_clear(var p : pointer;ti : pointer); [Public,Alias:'FPC_DYNARRAY_CLEAR']; compilerproc;
...

Procedure fpc_dynarray_clear (var p : pointer;ti : pointer);[external name 'FPC_DYNARRAY_CLEAR'];
Devil
новенький
 
Сообщения: 40
Зарегистрирован: 10.12.2008 09:56:33

Re: заюзать compilerproc. Из dynarr.inc, например

Сообщение Sergei I. Gorelkin » 10.12.2008 17:34:38

если в своем модуле вот так объявить, то вызывается:

Procedure fpc_dynarray_clear (var p : pointer;ti : pointer);external name 'FPC_DYNARRAY_CLEAR';
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: заюзать compilerproc. Из dynarr.inc, например

Сообщение Devil » 10.12.2008 18:27:21

Спасибо огромное! Заработало!

если можно, вопросец.
Соглашение о вызовах в FPC такое же как в Delphi? Т.е. первые 3 параметры eax, edx, ecx, single на стеке, FLOAT-результат в FPU и т.д. ?
Devil
новенький
 
Сообщения: 40
Зарегистрирован: 10.12.2008 09:56:33

Re: заюзать compilerproc. Из dynarr.inc, например

Сообщение Sergei I. Gorelkin » 10.12.2008 18:42:47

В первом приближении такое же. Насчет FPU не знаю, не сравнивал.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: заюзать compilerproc. Из dynarr.inc, например

Сообщение Devil » 10.12.2008 18:55:56

может почитать где-то можно?
чтобы знать точно.
Devil
новенький
 
Сообщения: 40
Зарегистрирован: 10.12.2008 09:56:33


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru