Exécuter java avec prog en c

cs_Bashi Messages postés 7 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 25 janvier 2004 - 8 mai 2003 à 18:42
matrez Messages postés 2 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 17 décembre 2005 - 17 déc. 2005 à 07:13
Bonjour, j'ai essayé d'utiliser un code c pour exécuter du java sous windows, je le compile avec Digital Mars. Mon fichier java est GPS.java et j'ai un main a l'intérieur, alors j'ai donné que variable de class GPS.main. Lorsque je compile il m'indique une erreur a la ligne: extraireDossierRacine (::GetCommandLine (), dossierCourant) ; a cause des 2 points, alors je les ai enlevé.
Maintenant, quand je compile cela m'indique:

link extraireDossierRacine,,,user32+kernel32/noi;
OPTLINK (R) for Win32 Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved

extraireDossierRacine.obj(extraireDossierRacine)
Error 42: Symbol Undefined _ShellExecuteA@24

--- errorlevel 1

Mon code complet est:

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
void extraireDossierRacine (char*, char*) ;
int dernierIndexDe (char*, char) ;
void formerArguments (char*, char*) ;
char *prgmJava = "javaw.exe", //ou "java.exe" (interperteur Java)
*classePrincipale = "GPS.main";
//ICI il faut determiner la classe principale : ".<classePrincipale>"
// ex : "Editeur.lancer"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow) {
char dossierCourant [100], arguments [100] ;
extraireDossierRacine (GetCommandLine (), dossierCourant) ;
formerArguments (arguments, dossierCourant) ;
ShellExecute (NULL, NULL, prgmJava, arguments, NULL, SW_SHOWNORMAL) ;
return 0 ;
}
//permet d'extraire le dossier où existe le fichier à partir de son chemin
void extraireDossierRacine (char *chemin, char *dossierRacine) {
int l = dernierIndexDe (chemin, '\\') ;
strncpy (dossierRacine, chemin, l) ;
dossierRacine [l] = '"' ;
dossierRacine [l + 1] = '\0' ;
}
//renvoie la dernière position d'un caractere dans une chaine
int dernierIndexDe (char *chaine, char c) {
for (int i = strlen (chaine); i > 0; i--)
if (chaine [i] == c)
return i ;
return -1 ;
}
//forme la liste des arguments : "-cp <dossierCourant> <classePrincipale>"
void formerArguments (char *arguments, char *dossierCourant) {
strcpy (arguments, "-cp ") ;
strcat (arguments, dossierCourant) ;
strcat (arguments, " ") ;
strcat (arguments, classePrincipale) ;
}

Est-ce que quelqu'un peut m'aider à le faire marcher?
Merci

4 réponses

cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
8 mai 2003 à 19:50
La fonction ShellExecute() ne se trouve ni dans les fonctions Kernel ni dans les fonctions User. Link ton programme avec la librairie shell32.lib.

Kaid - kaid.fr.st
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
12 mai 2003 à 00:37
Honêtement le mieux est d'instancier une machine virtuelle java anec JNI.

Core Breaker :)
0
matrez Messages postés 2 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 17 décembre 2005
17 déc. 2005 à 07:00
j'ai le meme pb avec ShellExecute :(
0
matrez Messages postés 2 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 17 décembre 2005
17 déc. 2005 à 07:13
0
Rejoignez-nous