Microsoft propose une solution très simple à ce problème : https://docs.microsoft.com/en-us/cpp/c-language/expanding-wildcard-arguments?view=msvc-170
En fait, il suffit d'utiliser l'une des deux bibliothèques qui étendent les caractères génériques dans la liste argv[] fournie à votre programme.
Pour clarifier à l'aide d'un exemple, disons que vous avez le code :
// ExampleFileExpansion.cpp : This outputs the cmd line arguments
//
#include <iostream>
#include <tchar.h>
using namespace std;
int wmain(int argc, _TCHAR* argv[]) {
for (int i = 0; i < argc; i++) {
wcout << i << "\t" << argv[i] << endl;
}
}
Ce qui donne normalement des résultats comme :
C:\x64\Debug>ExampleFileExpansion *.*
0 ExampleFileExpansion
1 *.*
Dans Visual Studio, accédez à la page des propriétés du projet et choisissez les options d'entrée de l'éditeur de liens | Dépendances supplémentaires. Ajoutez ensuite la bibliothèque (dans ce cas "wsetargv.obj") et appliquez la modification. Ensuite, construisez à nouveau le projet à partir du menu principal.
Après la modification, l'exécution du même code donne quelque chose comme :
C:\x64\Debug>ExampleFileExpansion *.*
0 ExampleFileExpansion
1 ExampleF.a660785c.tlog
2 ExampleFileExpansion.exe
3 ExampleFileExpansion.exe.recipe
4 ExampleFileExpansion.ilk
5 ExampleFileExpansion.log
6 ExampleFileExpansion.obj
7 ExampleFileExpansion.pdb
8 ExampleFileExpansion.vcxproj.FileListAbsolute.txt
9 vc143.idb
10 vc143.pdb
Voici quelques captures d'écran de VS 2022 pour illustrer les étapes :
Menu des propriétés du projet Visual Studio
Choisissez les options d'entrée de l'éditeur de liens, puis Editer pour obtenir la boîte de dialogue
Saisir le nom du fichier obj approprié, soit wsetargv.obj, soit setargv.obj, selon que la fonction wmain ou main est déclarée.