Arguments de la ligne de commande de l’API Win32

J’écris l’application console Win32, qui peut être démarrée avec des arguments optionnels comme ceci:

app.exe /argName1:"argValue" /argName2:"argValue" 

Dois-je parsingr manuellement (pour pouvoir déterminer quels arguments sont présents) à partir des variables argc / argv, ou l’API Win32 contient-elle des arguments parsingurs?

Il n’y a pas de support Win32 pour parsingr les arguments de ligne de commande.

Voir les articles connexes sur MSDN:
Analyse des arguments de ligne de commande C ++
Définitions d’argument
Personnalisation du traitement en ligne de commande C ++

examinez également des questions similaires:
Quelles sont les bibliothèques d’parsingurs de parameters pour C ++?
Analyser les parameters à main ()
Option Parsers pour C / C ++?
Quel est un moyen efficace d’parsingr les parameters de ligne de commande en C ++?

Le seul support fourni par Win32 pour les arguments de ligne de commande sont les fonctions GetCommandLine et GetCommandLine . C’est exactement le même que le paramètre argv que vous avez pour une application console.

Vous devrez faire l’parsing vous-même. Regex serait une bonne option pour cela.

Vous pouvez vous amuser avec diverses bibliothèques et autres choses… Mais parfois, tout ce dont vous avez besoin est simple, pratique et rapide:

 int i; char *key, *value; for( i = 1; i <= argc; i++ ) { if( *argv[i] == '/' ) { key = argv[i] + 1; value = strchr(key, ':'); if( value != NULL ) *value++ = 0; process_option( key, value ); } else { process_value( argv[i] ); } } 

Vous avez eu l'idée...

Cela suppose une application de console Win32 normale comme vous l’avez laissé entendre (qui a une fonction main traditionnelle). Pour les applications Win32 que vous WinMain place de WinMain , comme l'a déjà fait remarquer une autre personne.

Juste pour mémoire, si vous utilisez le GCC de MinGW plutôt que le MSVC de Microsoft, vous obtenez GNU getopt (qui inclut également les variantes getopt_long et getopt_long_only), incluses dans la bibliothèque d’exécution standard.

Vous pouvez parsingr les arguments en utilisant GetCommandLine, PathRemoveArgs, PathGetArgs dans une boucle

https://msdn.microsoft.com/en-us/library/windows/desktop/bb773742(v=vs.85).aspx

J’ai développé et utilise libparamset qui est écrit en clair C. Il est vraiment puissant et fonctionne bien sous Windows. Il offre:

  • Est multi-plateforme.
  • Prise en charge des caractères génériques pour la saisie de fichiers sous Windows!
  • Caractéristiques puissantes Voir libparamset .

Je ne crois pas qu’il existe une API Win32 disponible. Vous pouvez rechercher une implémentation Windows de getopt ou d’une autre bibliothèque.

Pas sûr de l’existence d’une telle fonction (s) api win32, mais la bibliothèque Boost.Program_Options pourrait vous aider.

Si vos besoins sont simples, vous voudrez peut-être jeter un coup d’œil à Argh! .
C’est simple en-tête et super facile à utiliser:

 int main(int, char* argv[]) { argh::parser cmdl(argv); // declare if (cmdl[{ "-v", "--verbose" }]) // use immediately std::cout << "Verbose, I am.\n"; return EXIT_SUCCESS; } 

En étant non intrusif, il ne reprend pas la fonction main() .

Du fichier Readme:

Philosophie

Contrairement à de nombreuses alternatives, argh adopte une approche de laisser-faire minimaliste, très adaptée au prototypage sans fioritures avec les règles suivantes:

L'API est:

  • Minimaliste mais expressif:
    • Pas de getters ni de liants
    • Juste les opérateurs [] et () .
    • Itération facile (scope aussi).
  • Vous ne payez pas pour ce que vous n'utilisez pas;
  • La conversion en variables typées se produit (via std::istream >> ) côté utilisateur après la phase d'parsing;
  • Aucune exception pour les échecs.
  • Licence libérale BSD;
  • Fichier d'en-tête unique;
  • Pas de dépendances non- std .

argh ne se soucie pas de:

  • Combien de ' - ' ont précédé votre option;
  • Quels sont les indicateurs et les options que vous soutenez? C'est votre responsabilité.
  • Validation de la syntaxe: toute ligne de commande est une combinaison valide ( pas nécessairement unique ) de parameters de position, d' indicateurs et d' options .
  • Produire automatiquement un message d'utilisation.