将c++数组传递给Ada95

Passing a C++ array to Ada95

本文关键字:Ada95 c++ 数组      更新时间:2023-10-16

我正试图将一组无符号整数从c++传递到Ada。Ada Lovelace教程指出,Ada数组对应于c++中指向数组第一个元素的指针。

这就是我要做的。

c++

unsigned int buffer[bufferSize];
...
unsigned int* getBuffer() {
    return buffer;
}
Ada

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的正确方法是什么?

谢谢!

这将按照您的要求执行(我没有为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");