什么将命令行参数解析为 Windows 上的 args[]?

What parses command line args into args[] on Windows?

在Windows上,CreateProcesswin32函数用于创建新进程。此函数的签名采用指向 "command line" lpCommandLine 的指针,因此命令行作为单个字符串传递。

我熟悉的每种语言(C、C++、C#、Java)都允许 main 接受字符串数组的函数。因此,在 CreateProcess 和 main 之间的某处,一定有一些东西正在解析 lpCommandLine 并将其转换为 args[]

此解析代码位于何处?它是 OS 的一部分(在 CreateProcess 内),还是每种语言 "runtime" 的一部分(在调用 main 之前在新进程中运行的代码)?

链接到您的程序中的运行时启动代码运行。例如,对于 C,它是 crt0.c.

创建的进程在某个声明的入口点以用户模式开始执行,该入口点不是 main。调用 main.

的是 C 运行时

当我还是一名 Windows C 程序员时,C 运行时源代码包含在 SDK 中。