[ Attachment content not displayed ]
Valeriy Gavrikov wrote: > > Как правильно импортировать подобный тип и как правильно с ним работать? > В предположении что create_some возвращает всё же не _объект_, а _указатель_, т.е. имеет объявление вида: some* create_some(); Код связки будет выглядеть следующим образом: type Some is private; type Some_Access is access all Some; pragma Convention (C, Some_Access); function Create_Some return Some_Access; pragma Import (C, Create_Some, "create_some"); private type Some is null record; pragma Convention (C, Some); а его использование: declare S : Some_Access := Create_Some; begin if S = null then raise Some_Exception; end if; end;
Valeriy Gavrikov <subjrs <at> gmail.com> writes: > Добрый деньТакой вопрос. Если некий тип в Си > объявлен как opaque > (я так понимаю это > аналогично приватным типам в Аде), то каким образом его > импортировать в программу на Аде? В SWIG-GNAT вроде были средства для работы с логически цельными структурами как последнее средство. Можно глянуть, что там. Напрашивается вариант узнать sizeof (структуры) через сишную функцию, потом заморозить это значение в константе, чтобы использовать в качестве правой границы массива байтов, и заморозить этот тип. Или не байтов? Можь, просто объявить null record, а потом ей for 'Size use? Не на чем сейчас проверить. > Я пробую следующее... > type some is private; А не лучше ли type some (<>) is private; , чтобы не было инициализации по умолчаанию ? Не знаю контекста использования.
Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти