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']; Компилятор BlackBox 1.6 разрешает использование системных флагов в процедурных типах (и различает их наличие). Поэтому все параметры-процедуры, как и фактические процедуры обратного вызова, обязаны быть объявлены с флагом [ccall].
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. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |