Discussion:
Argc, Argv dans un binding C
(trop ancien pour répondre)
Frédéric Praca
2017-11-07 22:20:18 UTC
Permalink
Bonjour à tous,
je commençais à regarder pour faire un binding de GStreamer en Ada quand
j'ai été confronté à un problème dès la première fonction :)
Comment traduire correctement un appel comme celui-là
void
gst_init (int *argc,
char **argv[]);

Gcc me fournit ça :
procedure gst_init (arg1 : access int; arg2 : System.Address); -- /usr/
include/gstreamer-1.0/gst/gst.h:98
pragma Import (C, gst_init, "gst_init");

mais je ne suis pas convaincu et surtout, je voudrais faire un "thick
binding" et donc traduire tout ça par des types plus "Ada-friendly".

Merci de votre aide

Fred
Blady
2017-11-12 11:34:26 UTC
Permalink
Bonjour Frédéric,

Voici comment cela a été traduit dans GTKAda (gdk-main.adb) :
procedure Init is
gnat_argc : Interfaces.C.int;
pragma Import (C, gnat_argc);
gnat_argv : System.Address;
pragma Import (C, gnat_argv);
procedure Internal (argc : System.Address; argv : System.Address);
pragma Import (C, Internal, "gdk_init");
begin
Internal (gnat_argc'Address, gnat_argv'Address);
end Init;

Cela permet de faire le lien avec les arguments récupérés par l'exécutif de GNAT.
Voir le lien:
https://gcc.gnu.org/onlinedocs/gnat_ugn/Example-of-Binder-Output-File.html

HTH, Pascal.
Post by Frédéric Praca
Bonjour à tous,
je commençais à regarder pour faire un binding de GStreamer en Ada quand
j'ai été confronté à un problème dès la première fonction :)
Comment traduire correctement un appel comme celui-là
void
gst_init (int *argc,
char **argv[]);
procedure gst_init (arg1 : access int; arg2 : System.Address); -- /usr/
include/gstreamer-1.0/gst/gst.h:98
pragma Import (C, gst_init, "gst_init");
mais je ne suis pas convaincu et surtout, je voudrais faire un "thick
binding" et donc traduire tout ça par des types plus "Ada-friendly".
Merci de votre aide
Fred
Loading...