私はWin32コンソールアプリケーションを書いています。これは次のようなオプションの引数で開始できます。
app.exe /argName1:"argValue" /argName2:"argValue"
Argc/argv変数から手動で解析する必要がありますか(どの引数が存在するかを判別できるようにするため)、またはWin32 APIにはいくつかの引数パーサーが含まれていますか?
parsingコマンドライン引数に対するWin32のサポートはありません。
MSDNの関連記事を参照してください。
C++コマンドライン引数の解析
引数の定義
C++コマンドライン処理のカスタマイズ
同様の質問も見てください:
C++用のパラメーターパーサーライブラリは何ですか?
main()へのパラメーターの解析
C/C++のオプションパーサー?
C++でコマンドラインパラメーターを解析する効果的な方法は何ですか?
.。
Win32がコマンドライン引数に対して提供する唯一のサポートは、関数GetCommandLine
およびCommandLineToArgvW
です。これは、コンソールアプリケーション用のargv
パラメーターとまったく同じです。
自分で解析を行う必要があります。正規表現はこれに適したオプションです。
さまざまなライブラリなどをいじくり回すことができます...しかし、必要なのは、シンプルで実用的で迅速なものだけである場合もあります。
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] );
}
}
あなたはアイデアを得る...
これは、(従来のmain
関数を備えた)通常のWin32コンソールアプリを想定しています。 Win32アプリの場合、別の人がすでにコメントしているので、代わりにWinMain
にアクセスします。
私はプレーンCで書かれた libparamset を開発して使用しています。これは非常に強力で、Windowsでうまく機能します。それは提供します:
念のため、MicrosoftのMSVCではなく MinGWのGCC を使用すると、GNU getopt、(getopt_longおよびgetopt_long_onlyバリアントも含まれます)が含まれます。標準のランタイムライブラリ。
ループでGetCommandLine, PathRemoveArgs, PathGetArgs
を使用すると、引数を解析できます
https://msdn.Microsoft.com/en-us/library/windows/desktop/bb773742(v = vs.85).aspx
ニーズが単純な場合は、 Argh! を確認することをお勧めします。
これは単一のヘッダーであり、非常に使いやすいです。
_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;
}
_
邪魔にならないため、main()
関数を引き継ぐことはありません。
Readmeから:
哲学
多くの選択肢とは異なり、
argh
は最小限のアプローチを採用していますlaissez-faireアプローチであり、次のルールを使用した手間のかからないプロトタイピングに非常に適しています。APIは次のとおりです。
- ミニマルだが表現力豊か:
- ゲッターもバインダーもありません
- _
[]
_および_()
_演算子のみ。- 簡単な反復(範囲-
for
も)。- 使用しないものにお金を払う必要はありません。
- 型付き変数への変換は、ユーザー側で(_
std::istream >>
_を介して)行われますafter解析フェーズ。- 失敗に対してスローされる例外はありません。
- リベラルBSDライセンス;
- 単一のヘッダーファイル。
std
以外の依存関係はありません。
argh
は気にしません:
- オプションの前にある「_
-
_」の数。- どのフラグとオプションをサポートするか-それはあなたの責任です。
- 構文の検証:anyコマンドラインは、位置パラメータ、フラグおよび-の有効な(必ずしも一意ではない)組み合わせです。 オプション;
- 使用状況メッセージを自動的に生成します。
Win32APIが利用できるとは思いません。 getopt または別のライブラリのWindows実装を探すことができます。
そのようなwin32api関数の存在についてはわかりませんが、 Boost.Program_Options ライブラリが役立つ可能性があります。