Ada_Ru форум

Обсуждение языка Ада

Import opaque data type from C

Оставить новое сообщение

Сообщения

Valeriy Gavrikov
Import opaque data type from C
2008-02-20 15:58:14
[ Attachment content not displayed ]
Vadim Godunko
Re: [ada_ru] Import opaque data type from C
2008-02-20 18:48:17
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;
Иван Леваше
Re: Import opaque data type from C
2008-03-07 22:44:11
Valeriy Gavrikov <subjrs <at> gmail.com> writes:

> Добрый деньТакой вопрос. Если некий тип в Си
> объявлен как opaque
> (я так понимаю это
> аналогично приватным типам в Аде), то каким образом его
> импортировать в программу на Аде?
В SWIG-GNAT вроде были средства для работы с логически цельными
структурами как последнее средство. Можно глянуть,
что там. Напрашивается вариант
узнать sizeof (структуры) через сишную функцию, потом
заморозить это значение в
константе, чтобы использовать в качестве правой границы
массива байтов, и заморозить
этот тип. Или не байтов? Можь, просто объявить null record,
а потом ей for 'Size use? Не на чем сейчас проверить.

> Я пробую следующее...
> type some is private;
А не лучше ли type some (<>) is private; , чтобы не было
инициализации по умолчаанию ? Не знаю
контекста использования.
Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти