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

Passing strings in C-ADA binding application

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

任何示例将不胜感激。

C 不知道与 Ada 的接口,因此您必须在 Ada 端进行接口工作。包 Interfaces.C.Strings 包含将 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");