OberonCore
https://forum.oberoncore.ru/

Указатель на ccall функцию
https://forum.oberoncore.ru/viewtopic.php?f=23&t=1177
Страница 1 из 1

Автор:  Штирлиц [ Понедельник, 06 Октябрь, 2008 09:53 ]
Заголовок сообщения:  Указатель на ccall функцию

Есть С-шная функция из ibase.h (заголовочный файл для клиентской библиотеки СУБД Firebird)
ISC_LONG ISC_EXPORT_VARARG isc_event_block(ISC_UCHAR**, ISC_UCHAR**, ISC_USHORT, ...);

В BlackBox определяю тип

ISC_EVENT_BLOCK* = PROCEDURE [ccall] (VAR [nil] event_buffer: PtrISC_UCHAR;
VAR [nil] result_buffer: PtrISC_UCHAR;
id_count: ISC_USHORT;
VAR [nil] event_list: PtrISC_SCHAR): ISC_LONG;

Компилятор ругается на [ccall] declaration followed by incorrect symbol.
Комментирую [ccall], все Ок.

В чем дело?

Автор:  Илья Ермаков [ Понедельник, 06 Октябрь, 2008 15:20 ]
Заголовок сообщения:  Re: Указатель на ccall функцию

В 1.6 кушает нормально.
В 1.5 какая-то тонкость была... Евгений Темиргалеев должен бы помнить.

Автор:  Евгений Темиргалеев [ Понедельник, 06 Октябрь, 2008 23:09 ]
Заголовок сообщения:  Re: Указатель на ccall функцию

Была такая проблема с портированием заголовка GLUT.h

Компилятор BlackBox 1.5 не разрешает использование системных флагов в процедурных типах. Параметры-процедуры Вы определяете как обычные процедуры (без системного флага [ccall]). При этом фактические процедуры должны быть определены с этим флагом. Компилятор игнорирует разницу. Проблем не возникает, поскольку эти процедуры вызываются только библитотекой GLUT (т.е. как [ccall]).

Пр.:
Код:
MODULE OglGLUT['glut32'];
PROCEDURE ReshapeFunc* ['glutReshapeFunc'] (f: PROCEDURE (width, height: INTEGER));
....
END OglGLUT.

MODULE OglGLUTExplosion;
...
   PROCEDURE [ccall] ReshapeCallback (w, h: INTEGER);
   BEGIN
      Resize(w, h)
   END ReshapeCallback;

   PROCEDURE Init (): BOOLEAN;
...
   BEGIN
...
         GLUT.ReshapeFunc(ReshapeCallback);
...
   END Init;
END OglGLUTExplosion.
Компилятор BlackBox 1.6 разрешает использование системных флагов в процедурных типах (и различает их наличие). Поэтому все параметры-процедуры, как и фактические процедуры обратного вызова, обязаны быть объявлены с флагом [ccall].

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/