私はC関数からAda関数(C-Adaバインディングアプリケーション)に文字列を渡す必要があります。CからAdaに文字列を渡す最も良い方法
C関数:
extern void ada_func_print_string(char*);
void Pass_String()
{
char str[] = "Hello_Ada";
ada_func_print_string(str);
}
エイダ機能:
仕様:
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あるべきかどうか?このアプリケーションに関する2つの違いは何ですか?ここにはこの2つのタイプの中で致命的なことがありますか?
本当に助かりました! –