我遇到了一些与从Ada接口到C的问题。 特别是,我有这个ada声明:
type Byte is mod 256; pragma Convention (C, Byte);
type ByteStream is array (Interfaces.C.size_t range <>) of Byte;
pragma Convention (C, ByteStream);
type VoidPointer is access all ByteStream;
type ByteBuffer is
record
data : VoidPointer;
size : Interfaces.C.size_t;
end record;
pragma Convention (C, ByteBuffer);
procedure Free is new Ada.Unchecked_Deallocation (ByteStream, VoidPointer);
以及这个C声明:
struct ByteBuffer {
unsigned char *data;
size_t size;
};
还有这个ada导入:
function My_Function (
data : in ByteBuffer)
return Interfaces.C.int;
pragma Import (C, My_Function, "my_function");
而这个C声明:
int my_function(struct ByteBuffer data);
然而,当我调试我的代码时,在ada端发现大小为110,在c端却是0x7fffffffe750。为什么我的size_t被破坏了?(注意:数据本身也被破坏了,但希望修复一个问题会修复另一个问题)。
pragma Convention (C, ByteBuffer);
可以解决这个问题。也许我还需要在 C 端指定一些东西? - LambdaBeta