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']; ВВ 1.5 процедурный тип поддерживает. Системный флаг ccall без кавычек ситуации не меняет. Модуль компилируется по-другому… TYPE … OutputMessageFunction* = PROCEDURE[declaration followed by incorrect symbol] ["ccall"] (fif: IMAGE_FORMAT; msg: PChar); … PROCEDURE SetOutputMessage*["_FreeImage_SetOutputMessage@4"] (omf: OutputMessageFunction); … Код: 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/ |