Voici le code que j'utilise (c'est du code classique d'en tête de fichier):
// ****** Constantes statiques de la ligne de commande ********
static const wxCmdLineEntryDesc g_cmdLineDesc [] =
{
{ wxCMD_LINE_SWITCH, "a", "aide", "Affiche l'aide de la ligne de commande", wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
{ wxCMD_LINE_SWITCH, "d", "debug", "Affiche les messages de debug", wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL },
{ wxCMD_LINE_SWITCH, "s", "secondaire", "Passe en mode de programme secondaire pour XXXXXX", wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL },
{ wxCMD_LINE_SWITCH, "1", "t1", "Utilise la détection des mains (mode1)", wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL },
{ wxCMD_LINE_SWITCH, "2", "t2", "Utilise la détection des mains (mode2)", wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL },
{ wxCMD_LINE_SWITCH, "b", "absolu", "Passe la souris en mouvement absolu plutot que relatif", wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL },
{ wxCMD_LINE_SWITCH, "w", "width", "Largeur de la zone de prise en compte du pointage absolu.", wxCMD_LINE_VAL_STRING , wxCMD_LINE_PARAM_OPTIONAL },
{ wxCMD_LINE_SWITCH, "h", "height", "Hauteur de la zone de prise en compte du pointage absolu.", wxCMD_LINE_VAL_STRING , wxCMD_LINE_PARAM_OPTIONAL },
{ wxCMD_LINE_SWITCH, "x", "ofsetX", "Décalage X de la zone de prise en compte du pointage absolu.", wxCMD_LINE_VAL_STRING , wxCMD_LINE_PARAM_OPTIONAL },
{ wxCMD_LINE_SWITCH, "y", "ofsetY", "Décalage Y de la zone de prise en compte du pointage absolu.", wxCMD_LINE_VAL_STRING , wxCMD_LINE_PARAM_OPTIONAL },
{ wxCMD_LINE_NONE }
};
void mon_app::OnInitCmdLine(wxCmdLineParser& parser)
{
parser.SetDesc (g_cmdLineDesc);
// refuse '/' comme paramètre de démarrage et ne peut utiliser des / comme des chemins... (type /path)
parser.SetSwitchChars (wxT("-"));
}
bool mon_app::OnCmdLineParsed(wxCmdLineParser& parser)
{
if (parser.Found(wxT("s")) || parser.Found(wxT("secondaire")))
CurrentVersion=true;
else
CurrentVersion=false;
// utilise la partie du coprs en fonction de l'entrée t1 ou t2
current_part_of_person = 0;
if (parser.Found(wxT("1")) || parser.Found(wxT("t1"))) current_part_of_person = 1;
if (parser.Found(wxT("2")) || parser.Found(wxT("t2"))) current_part_of_person = 2;
if (parser.Found(wxT("b")) || parser.Found(wxT("absolu"))) N_absolu=true;
// récupères les paramètres avec données
wxString sName=_T("");
if (parser.Found(_T("w"),&sName) || parser.Found(_T("width"),&sName)) N_abs_width= wxAtoi(sName);
if (parser.Found(_T("h"),&sName) || parser.Found(_T("height"),&sName)) N_abs_height=wxAtoi(sName);
if (parser.Found(_T("x"),&sName) || parser.Found(_T("ofsetX"),&sName)) N_ofsetx=wxAtoi(sName);
if (parser.Found(_T("y"),&sName) || parser.Found(_T("ofsetY"),&sName)) N_ofsety=wxAtoi(sName);
if (parser.Found(wxT("d"))) {
// passe en mode debug
slog_set_priority (SLOG_PRIO_DEBUG);
#if defined(WIN32)
AllocConsole();
freopen("CONOUT$", "wb", stdout);
slog_write (SLOG_PRIO_INFO, "mode debug en cours");
#endif
}
return true;
}
Jusque là rien de particulier car visiblement le code fonctionne.
lorsque je passe un argument simple dans la ligne de commande ( "mon_appli.exe -s" par exemple) l'argument est bien pris en compte, si j'y ajoute un paramètre avec une valeur derrière ( "mon_appli.exe -x 800" par exemple) j'obtient systématiquement "unexpected parameter '800'".
C'est certainement un truc à la c**n mais je cale sur l'envoi de ce paramètre. Sachant que ca ne vient pas du débugger, car sur le raccourci de l'exe j'ai le même souci.