Передача массива C ++ в Ada95 - PullRequest
3 голосов
/ 08 декабря 2011

Я пытаюсь передать массив целых чисел без знака из C ++ в Ada. В учебнике Ada Lovelace говорится, что массив Ada соответствует указателю на первый элемент массива в C ++.

Вот что я пытаюсь сделать.

C ++

unsigned int buffer[bufferSize];

...

unsigned int* getBuffer() {
    return buffer;
}

Ад

pragma Import (C, C_Get_Buffer, "getBuffer");

...

function C_Get_Buffer returns System.Address;

...

Buffer : array (1 .. Buffer_Size) of Interfaces.C.Unsigned;

...

Buffer'Address := C_Get_Buffer;

Я считаю, что адрес буфера не может быть назначен как бы то ни было. Как правильно передать массив из C в Ada?

Спасибо!

1 Ответ

4 голосов
/ 09 декабря 2011

Это будет делать, как вы просите (я не стал беспокоиться о Buffer_Size):

function C_Get_Buffer return System.Address;
pragma Import (C, C_Get_Buffer, "getBuffer");
Buffer_Address : constant System.Address := C_Get_Buffer;
Buffer : array (1 .. 10) of Interfaces.C.unsigned;
for Buffer'Address use Buffer_Address;

Однако, это может быть уместно, поскольку более короткий способ достижения того же:

Buffer : array (1 .. 10) of Interfaces.C.unsigned;
pragma Import (C, Buffer, "buffer");
...