我是一个有用的助手,可以为您翻译文本。
我有一个需求,需要从C函数传递一个字符串到Ada函数(一个C-Ada绑定应用程序)。
C函数:
上面的代码运行得很好,没有任何问题。我想问的是,形式参数 C_Source 的声明是否适合作为 Interfaces.C.char_array 还是更应该是 Interfaces.C.Strings.chars_ptr?在这个应用程序中,这两者有什么不同?在这两种类型之间使用是否有致命的问题?
我有一个需求,需要从C函数传递一个字符串到Ada函数(一个C-Ada绑定应用程序)。
C函数:
extern void ada_func_print_string(char*);
void Pass_String()
{
char str[] = "Hello_Ada";
ada_func_print_string(str);
}
Ada函数:
规范:
pragma Export (Convention => C,
Entity => Ada_Print_String,
External_Name => "ada_func_print_string");
正文:
procedure Ada_Print_String (C_Source : Interfaces.C.char_array)
Ada_Str : String := Interfaces.C.To_Ada(Item => C_Source,
Trim_Nul => True);
begin
Ada.Text_IO.Put_Line(Ada_Str);
end Ada_Print_String;
上面的代码运行得很好,没有任何问题。我想问的是,形式参数 C_Source 的声明是否适合作为 Interfaces.C.char_array 还是更应该是 Interfaces.C.Strings.chars_ptr?在这个应用程序中,这两者有什么不同?在这两种类型之间使用是否有致命的问题?