Bonjours,

voilà, je vous explique mon probleme :
Je veux lancer un script Perl depuis un programme C, et donc j'ai le code suivant :

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);
}
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.
C'est la fonction "perl_parse" qui s'en occuppe sous la forme suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
 perl_parse(my_perl, NULL, argc, argv, NULL);
avec bien sur l'entete du main suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
int main( int argc, char **argv, char **env)
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 )
J'ai donc fait les modifications suivantes :
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);
...
Ce qui donne le source que j'ai mis tout en haut.

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 :
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.
Grrrr méchante machine !!

Si qqun sait d'où ca peut venir et m'aider je lui en serait tres reconnaissant.

@+