Argument en win32 [Résolu]

Signaler
Messages postés
134
Date d'inscription
vendredi 2 mai 2003
Statut
Membre
Dernière intervention
14 novembre 2009
-
Messages postés
198
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
18 mars 2011
-
Comment recevoir les arguments envoyé à une application windows.

6 réponses

Messages postés
198
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
18 mars 2011
1
#include <windows.h>
#include <stdlib.h>

int WINAPI WinMain(HINSTANCE hInst, 
                   HINSTANCE hPrev, 
                   LPSTR     lpszArg, 
                   int       iCmdShow)
{
    int  i;
    char szBuf[260];

    wsprintf(szBuf, "argc == %d\n\n", __argc); 

    for(i = 0; i < __argc; i++)
        wsprintf(szBuf, "%sargv[%d] == %s\n", szBuf, i, __argv[i]);  

    MessageBox(NULL, szBuf, __argv[0], MB_OK);

    return 0;
}
Messages postés
198
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
18 mars 2011
1
Autre solution...

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInst, 
                   HINSTANCE hPrev, 
                   LPSTR     lpszArg, 
                   int       iCmdShow)
{
  int   i;  
  int   argc = 0;
  char *args[1024];
  char **argv = args;                 
  char *p, *q;
  char  szTmp[MAX_PATH];
  char  szBuf[MAX_PATH];

  // Parser la ligne de commande
  GetModuleFileName(NULL, szTmp, MAX_PATH);
  argv[argc++] = szTmp;
  p = lpszArg;

  while(1) 
  {
    if(*p == ' ')
      while(*++p == ' ')
        ;

    if(*p == '\0')
      break;    

    argv[argc++] = q = p;

    while(*q && *q != ' ')
      ++q;

    if(*q == '\0')
      break;    

    *q = '\0';   
    p = q + 1;
  }
  argv[argc] = NULL;

    
  // Afficher les elements de la ligne de commande
  wsprintf(szBuf, "argc == %d\n\n", argc);

  for(i = 0; i < argc; i++)
    wsprintf(szBuf, "%sargv[%d] == %s\n", szBuf, i, argv[i]);  

  MessageBox(NULL, szBuf, argv[0], MB_OK);

  return 0;
}

Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int iCmdShow
)
{
...
}
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

ou via la fonction GetCommandLine()
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

GetCommandLine() ? cool, jconnaissais pas, merci de l'info :)

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
magma > jette un oeil au listing produit en se servant de __argv etc... Une enorme masse de code et d'aussi grosses variables globales qui ont toutes chances de n'etre employees qu'1 seule fois, me semble y avoir du gachis.
Le parsing depuis le param de WinMain est plus economique.
Si on supprime l'emploi de la CRT alors GetCommandLine() sera le meilleur.

ciao...
BruNews, MVP VC++