_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010
-
11 juil. 2006 à 18:31
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010
-
19 juil. 2006 à 13:45
J'ai un problème avec le paramètre lpCmdLine, défini dans WinMain :
int WINAPI WinMain
(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
->LPSTR lpCmdLine,<-
int nCmdShow
)
Mon aide Windows me spécifie que cet argument pointe sur la ligne de commande du programme, pourtant je n'obtient rien.
Un programmeur plus expérimenté que moi saurait-il comment obtenir la ligne de commande?
cs_saifer
Messages postés115Date d'inscriptionsamedi 29 mars 2003StatutMembreDernière intervention19 décembre 20081 11 juil. 2006 à 19:44
Salut,
lpCmdLine pointe sur une chaine de caractère qui est les argument passé au programme.
Ex : si ton prog s'appelle prog.exe, et que tu le lance avec la commande : "chemin\prog.exe argument1 argument2", alors lpCmdLine contiendra "argument1 argument2".
<hr size="2" width="100%" />-{ Saifer }-
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010 11 juil. 2006 à 21:45
Merci, GetCommandLine marche à merveille, et mon programme aussi, même si je n'ai pas compris pourquoi lpCmdLine n'arrive pas à pointer sur une chaine.
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010 16 juil. 2006 à 14:14
Ok, ok, toutes mes excuses...
Le problème, c'est que malgré les indications si logiques qu'elles soient de Saifer, ça marche quand même pas de cette façon.
J'ai simplifié le code, et ça donne :
#include <windows.h>
#include <stdio.h>
int WINAPI WinMain
(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
printf("Ligne de commande : %s\n", lpCmdLine);
return(0);
}
Quand j'execute avec "main blabla", ça ne m'affiche rien.
Je pense que c'est le format qui n'est pas bon (LPSTR).
Bein ou est le probleme ce que tu as écrit c'est ce que saifer t'a dit
si tu utilise int main(int argc, char *argv[]);
Bein la LPSTR lpCmdLine ne sert a rien.
Avec main le pointeur vers des char argv fonction comme cela:
argv[0]="argument 1"
argv[1]="argument 2"
et int argc contient le nombre d'argument transmit.
Je m' y connait pas trop dedans alors si j'ai une erreur dite le vite^^ lol
++
MaLaDeDeDe 97one
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010 17 juil. 2006 à 12:21
En effet, c'est tout à fait exact, tu as dit une erreur :
Si j'utilise une WinMain, c'est pour pouvoir faire une API Windows. La différence avec une autre application : On n'a pas besoin d'une fenêtre MS-DOS a coté. Si j'utilise argc et **argv, comme je fait d'habitude, le compilateur peut pas la reconnaitre comme une WinMain et donc pas d'API Windows.
C'est toi qui dit une grosse erreur la.
argc et **argv ne s'utilise qu'avec main on est d'accord.
Mais "main" n'empaiche pas l'utilisation de l'API windows surement pas.
Tu peux creer une fenetre windows a coté de celle du dos........
Et puis je ne parlaispas de ca je parlais de la facon de récupéré les argument de la ligne de commande.....alalal
cs_Joky
Messages postés1787Date d'inscriptionlundi 22 novembre 2004StatutMembreDernière intervention31 janvier 20092 18 juil. 2006 à 14:38
le problème c'est que saifer te raconte n'importe quoi :(
LPSTR = long pointer sur string
Donc ce n'est que adresse
Il ne contiendra donc jamais : "argument1 argument2"
Par contre *lpCmdLine contiendra 'a'
etc...
ULARGE_INTEGERJokyQi=QI("Joky"
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
printf("%s",lpszArgument);
}
Meme si c'est un pointeur ca change pas grand chose parceque les chaines de caractaires sont toujours passé par référence.
( Lors de la transmition de la chaine a une fonction, seul un pointeur vers le premier caractaire sera passé).
cs_saifer
Messages postés115Date d'inscriptionsamedi 29 mars 2003StatutMembreDernière intervention19 décembre 20081 18 juil. 2006 à 18:16
En effet Joky, je me suis mal exprimé, je voulais dire "que *lpCmdLine pointera vers la première lettre de la chaîne de caractères qui représente les arguements passer au programme".
Dsl, mais je pensais qu'a peu de chose près...
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010 19 juil. 2006 à 13:45
Euréka!
En fait, je pigeais pas pourquoi j'arrivait pas à trouver la ligne de commande en l'affichant avec printf.
Mais cette fonction ne marche pas avec les API Windows, à moins de changer la sortie standard.
Donc j'avais bien la ligne, mais elle s'affichait dans le vide.
En affichant une MessageBox, on résoud le problème, il y a même pas besion de copier lpCmdLine dans une autre chaine.