我正在尝试将一个无符号整数数组从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;
我发现无法分配Buffer'Address。将数组从C传递到Ada的正确方法是什么?
谢谢!
答案 0 :(得分:4)
这会按照你的要求行事(我没有打扰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");