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-------------------------------
Réponse au message :
-------------------------------
> 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 : "<package>.<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