如何将C函数中的字符串传递给ADA中的函数(C-ADA绑定)?
任何例子都会受到赞赏。
答案 0 :(得分:3)
基本上,你会在Ada一侧创建一个子程序来映射你的C函数:
procedure Foo (C : Interfaces.C.Strings.chars_ptr);
pragma import (C, Foo, "foo");
因此,您可以从Ada访问foo()
。
该自定义将提供更多Ada友好版本,其中包含:
procedure Foo (C : String) is
S : Interfaces.C.Strings.chars_ptr := New_String (C);
begin
Foo (S);
Free (S);
end Foo;
另一方面,如果程序是用Ada编写的,你想从C调用它,你可以使用:
procedure Foo (C : Interfaces.C.Strings.chars_ptr);
pragma Export (C, Foo, "foo");
然后从C你可以打电话:
extern void foo(char* c);
foo("bar");
答案 1 :(得分:1)
C不知道与Ada的接口,所以你必须在Ada端进行接口工作。包Interfaces.C.Strings
包含将C字符串映射到Ada字符串的操作。