在 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");
如何将字符串从 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");