在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字符串的操作。