CommandLineToArgvW 関数 (shellapi.h)

Unicode コマンド ライン文字列を解析し、標準の C ランタイム argv 値と argc 値に似た方法で、コマンド ライン引数へのポインターの配列と、そのような引数の数を返します。

構文

LPWSTR * CommandLineToArgvW(
  [in]  LPCWSTR lpCmdLine,
  [out] int     *pNumArgs
);

パラメーター

[in] lpCmdLine

種類: LPCWSTR

完全なコマンド ラインを含む null で終わる Unicode 文字列へのポインター。 このパラメーターが空の文字列の場合、関数は現在の実行可能ファイルへのパスを返します。

[out] pNumArgs

型: int*

argc と同様に、返される配列要素の数を受け取る int へのポインター。

戻り値

種類: LPWSTR*

argv と同様に、LPWSTR 値の配列へのポインター。

関数が失敗した場合は、返される値は NULL です。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

CommandLineToArgvW によって返されるアドレスは、LPWSTR 値の配列内の最初の要素のアドレスです。この配列内のポインターの数は pNumArgs で示されます。 null で終わる Unicode 文字列への各ポインターは、コマンド ラインで見つかった個々の引数を表します。

CommandLineToArgvW は、引数文字列へのポインターと、引数文字列自体に対して連続するメモリのブロックを割り当てます。呼び出し元のアプリケーションは、引数リストで使用されるメモリが不要になったら解放する必要があります。 メモリを解放するには、 LocalFree 関数を 1 回呼び出します。

argv および argc 引数の規則の詳細については、「引数の定義」および「C Command-Line 引数の解析」を参照してください。

GetCommandLineW 関数を使用すると、lpCmdLine パラメーターとして使用するのに適したコマンド ライン文字列を取得できます。

この関数は、プログラム名を含むコマンド ラインを受け入れます。プログラム名は引用符で囲むことができます。

CommandLineToArgvW には、円記号文字の後に引用符文字 (") が続く場合に、円記号の特別な解釈があります。 この解釈は、前の引数が有効なファイル システム パスであるか、予期しない動作をする可能性があることを前提としています。

この特別な解釈は、パーサーによって追跡される "引用符で囲まれた" モードを制御します。 このモードがオフの場合、空白は現在の引数を終了します。 オンにすると、他のすべての文字と同様に、空白文字が引数に追加されます。

  • 2n 個 の円記号の後に引用符を付けた場合、 n 個 の円記号の後に開始/終了引用符が続きます。 これは解析された引数の一部ではありませんが、"引用符で囲む" モードを切り替えます。
  • (2n) + 1 個の円記号の後に引用符を付けると、再び n 個の円記号が生成され、その後に引用符リテラル (") が続きます。 これにより、"引用符で囲む" モードは切り替わりません。
  • n 円記号の後に引用符が続かないと、単に n 個の円記号が生成されます。
重要  

CommandLineToArgvW は、引用符の外側にある空白文字を引数区切り記号として扱います。 ただし、 lpCmdLine が任意の量の空白で始まる場合、 CommandLineToArgvW は最初の引数を空の文字列と見なします。 lpCmdLine の末尾にある余分な空白は無視されます。

 

次の例では、Unicode コマンド ライン文字列を解析する方法を示します。 このコードは、終了時に引数リストのメモリを解放します。

#include <windows.h>
#include <stdio.h>
#include <shellapi.h>

int __cdecl main()
{
   LPWSTR *szArglist;
   int nArgs;
   int i;

   szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
   if( NULL == szArglist )
   {
      wprintf(L"CommandLineToArgvW failed\n");
      return 0;
   }
   else for( i=0; i<nArgs; i++) printf("%d: %ws\n", i, szArglist[i]);

// Free memory allocated for CommandLineToArgvW arguments.

   LocalFree(szArglist);

   return(1);
}

要件

要件
サポートされている最小のクライアント Windows 2000 Professional、Windows XP [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server、Windows Server 2003 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー shellapi.h
Library Shell32.lib
[DLL] Shell32.dll (バージョン 6.0 以降)