在C-ADA绑定应用程序中传递字符串

如何将C函数中的字符串传递给ADA中的函数(C-ADA绑定)?

任何例子将不胜感激。

基本上,你会在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"); 

C不知道与Ada的接口,所以你必须在Ada端进行接口工作。 Interfaces.C.Strings包包含将C字符串映射到Ada字符串的操作。