commandLineToArgvW 函数 (shellapi.h)

分析 Unicode 命令行字符串,并返回指向命令行参数的指针数组,以及此类参数的计数,其方式类似于标准 C 运行时 argvargc 值。

语法

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

参数

[in] lpCmdLine

类型: LPCWSTR

指向包含完整命令行的 以 null 结尾的 Unicode 字符串的指针。 如果此参数为空字符串,则函数返回当前可执行文件的路径。

[out] pNumArgs

类型: int*

指向接收返回的数组元素数的 int 的指针,类似于 argc

返回值

类型: LPWSTR*

指向 LPWSTR 值数组的指针,类似于 argv

如果函数失败,则返回值为 NULL。 要获得更多的错误信息,请调用 GetLastError。

注解

CommandLineToArgvW 返回的地址是 LPWSTR 值数组中第一个元素的地址;此数组中的指针数由 pNumArgs 指示。 指向 以 null 结尾的 Unicode 字符串的每个指针都表示在命令行上找到的单个参数。

CommandLineToArgvW 为指向参数字符串的指针和参数字符串本身分配连续内存块;当不再需要参数列表时,调用应用程序必须释放该内存。 若要释放内存,请使用对 LocalFree 函数的单个调用。

有关 argvargc 参数约定的详细信息,请参阅 参数定义 和分析 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 专业版、Windows XP [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server、Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 shellapi.h
Library Shell32.lib
DLL Shell32.dll (6.0 或更高版本)