17

私はWin32コンソールアプリケーションを書いています。これは次のようなオプションの引数で開始できます。

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

argc / argv変数から手動で解析する必要がありますか(どの引数が存在するかを判別できるようにするため)、またはWin32 APIにはいくつかの引数パーサーが含まれていますか?

4

9 に答える 9

16

コマンドライン引数を解析するための Win32 サポートはありません。

MSDN の関連記事を参照してください。
C++ コマンド ライン引数の解析
引数の定義
C++ コマンド ライン処理のカスタマイズ

同様の質問も参照してください:
C++ にはどのようなパラメーター パーサー ライブラリがありますか? C/C++ の
main() オプション パーサーへのパラメーターの解析? C++ でコマンド ライン パラメータを解析する効果的な方法は何ですか? ...


于 2012-10-02T11:21:03.520 に答える
9

Win32がコマンドライン引数に対して提供する唯一のサポートは、関数GetCommandLineCommandLineToArgvWです。argvこれは、コンソールアプリケーション用のパラメータとまったく同じです。

自分で解析を行う必要があります。正規表現はこれに適したオプションです。

于 2012-10-02T12:45:31.387 に答える
6

さまざまなライブラリやものをいじることができます...しかし、必要なのは単純で実用的で迅速なものだけである場合があります。

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、別の人が既にコメントしているように、代わりに参加します。

于 2012-10-02T11:33:04.447 に答える
3

GetCommandLine, PathRemoveArgs, PathGetArgsループで使用して引数を解析できます

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

于 2016-03-30T18:26:11.243 に答える
3

私はプレーン C で書かれたlibparamsetを開発して使用しています。これは非常に強力で、Windows でうまく動作します。以下を提供します。

  • クロスプラットフォームです。
  • Windows でのファイル入力のワイルドカード サポート!
  • 強力な機能。libparamsetを参照してください。
于 2018-03-16T13:58:21.853 に答える
1

利用可能な Win32 API があるとは思えません。getoptまたは別のライブラリの Windows 実装を探すことができます。

于 2012-10-02T11:17:35.097 に答える
1

そのような win32 api 関数の存在についてはわかりませんが、Boost.Program_Optionsライブラリが役に立ちます。

于 2012-10-02T11:18:12.537 に答える