public static List<string> CommandLineToArgs(string commandLine)
{
int argc;
var argv = CommandLineToArgvW("cl.exe " + commandLine, out argc);
if (argv == IntPtr.Zero)
throw new InvalidProgramException("could not split command line args");
var args = new List<string>();
for (var i = 0; i < argc; i++)
{
var pstr = Marshal.ReadIntPtr(argv, i * IntPtr.Size);
args.Add(Marshal.PtrToStringUni(pstr));
}
Marshal.FreeHGlobal(argv);
return args;
}