<p>In a Windows program, what is the canonical way to parse the command line obtained from GetCommandLine into multiple arguments, similar to the argv array in Unix?  It seems that CommandLineToArgvW does this for a Unicode command line, but I can't find a non-Unicode equivalent.  Should I be using Unicode or not?  If not, how do I parse the command line?</p>

```
CommandLineToArgvW()
```
is in shell32.dll.  I'd guessthat the Shell developers created the function for their own use, and it was made public either because someone decided that 3rd party devs would find it useful or because some court action made them do it.
Since the Shell developers only ever needed a Unicode version that's all they ever wrote.  It would be fairly simple to write an ANSI wrapper for the function that converts the ANSI to Unicode, calls the function and converts the Unicode results to ANSI (and if Shell32.dll ever provided an ANSI variant of this API, that's probably exactly what would do).