Bonjours,
voilà, je vous explique mon probleme :
Je veux lancer un script Perl depuis un programme C, et donc j'ai le code suivant :
Le truc est le suivant : la fonction perl_call_argv appelle une sous routine "prog" qui est situé dans le fichier "prog.pl" (classe perl). Il faut donc spécifié le fichier qui contient "prog.pl". Ce qui normalement est fait en passant la chaine "prog.pl" en argument quand on éxécute le prog.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include <EXTERN.h> #include <perl.h> static PerlInterpreter *my_perl; int main (/* int argc, char **argv, char **env */) { char *args[] = { NULL }; int arg = 1; char *embedding[] = { "prog.pl" }; my_perl = perl_alloc(); perl_construct(my_perl); // l'erreur est au niveau de perl_parse. perl_parse(my_perl, NULL, arg, embedding, NULL); perl_call_argv("prog", G_VOID | G_NOARGS, args); perl_destruct(my_perl); perl_free(my_perl); }
C'est la fonction "perl_parse" qui s'en occuppe sous la forme suivante :
avec bien sur l'entete du main suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 perl_parse(my_perl, NULL, argc, argv, NULL);
Seulement, plutot que de le passer en paramètre à la ligne de commande, je voudrais entrer en dur dans le code C, le nom du fichier ou se trouve la sub routine (prog dans proG.pl si vous me suivez )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int main( int argc, char **argv, char **env)
J'ai donc fait les modifications suivantes :
Ce qui donne le source que j'ai mis tout en haut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 char *embedding[] = { "prog.c"}; int arg = 1; ... perl_parse( NULL, arg, embedding, NULL); ...
J'en viens donc au coueur du probleme : pour la compilation et les link, pas de probleme mais osque j'éxéute le prog le message suivant s'affiche :
Grrrr méchante machine !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 L'instrcution à "0x78012ba1" emploie l'adresse mémoire "0x00000001". La mémoire ne peut pas être read.
Si qqun sait d'où ca peut venir et m'aider je lui en serait tres reconnaissant.
@+
Partager