OberonCore
https://forum.oberoncore.ru/

Системный флаг в процедурном типе
https://forum.oberoncore.ru/viewtopic.php?f=2&t=2790
Страница 1 из 1

Автор:  id_ler [ Четверг, 19 Август, 2010 06:06 ]
Заголовок сообщения:  Системный флаг в процедурном типе

Скачал из коллекции Zinna подсистему Free (Loading, displaying and saving many graphic image formats). При компиляции интерфейсного модуля для dll-ки получаю следующую ошибку
Код:
 MODULE FreeImageDll['FreeImage.dll'];

TYPE

OutputMessageFunction* = PROCEDURE[declaration followed by incorrect symbol] ["ccall"] (fif: IMAGE_FORMAT; msg: PChar);

PROCEDURE SetOutputMessage*["_FreeImage_SetOutputMessage@4"] (omf: OutputMessageFunction);
ВВ 1.5 процедурный тип поддерживает. Системный флаг ccall без кавычек ситуации не меняет. Модуль компилируется по-другому
Код:
 MODULE FreeImageDll['FreeImage.dll'];

TYPE

OutputMessageFunction* = PROCEDURE (fif: IMAGE_FORMAT; msg: PChar);

PROCEDURE ["ccall"] SetOutputMessage*["_FreeImage_SetOutputMessage@4"] (omf: OutputMessageFunction);

Может быть, так и надо делать? Но странно, ведь у разработчиков как-то компилировалось.

Автор:  Евгений Темиргалеев [ Четверг, 19 Август, 2010 08:35 ]
Заголовок сообщения:  Re: Системный флаг в процедурном типе

Компилятор в ББ 1.6 поддерживает системные флаги в процедурных типах, в 1.5 - нет.
OglGLUT docu писал(а):
Модуль рассчитан на BlackBox версий 1.5 и 1.6. Отличие для этих версий заключается в следующем:
- все процедуры обратного вызова, передаваемые библиотеке GLUT, должны быть [ccall];
- компилятор BlackBox 1.5 не разрешает использование системных флагов в процедурных типах. Поэтому все параметры-процедуры, через которые передаются процедуры обратного вызова определены как обычные процедуры (без системного флага [ccall]). При этом фактические процедуры должны быть определены с этим флагом. Компилятор игнорирует разницу. При этом всё работает корректно, поскольку эти процедуры вызываются только библитотекой GLUT (т.е. как [ccall]);
- компилятор BlackBox 1.6 разрешает использование системных флагов в процедурных типах (и различает их наличие). Поэтому все параметры-процедуры, как и фактические процедуры обратного вызова, обязаны быть объявлены с флагом [ccall].
У Вас, как я понял, ситуация аналогичная.

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