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 ]

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; , чтобы не было

инициализации по умолчаанию ? Не знаю

контекста использования.

Новое сообщение:
Страницы: 1

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