OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 27 Апрель, 2024 17:44

Часовой пояс: UTC + 3 часа




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

Зарегистрирован: Среда, 17 Январь, 2007 03:59
Сообщения: 225
Есть С-шная функция из 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], все Ок.

В чем дело?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Указатель на ccall функцию
СообщениеДобавлено: Понедельник, 06 Октябрь, 2008 15:20 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
В 1.6 кушает нормально.
В 1.5 какая-то тонкость была... Евгений Темиргалеев должен бы помнить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Указатель на ccall функцию
СообщениеДобавлено: Понедельник, 06 Октябрь, 2008 23:09 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Была такая проблема с портированием заголовка 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].


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB