我已经阅读了一些关于不同Windows C条目权限的文章,wmain和WinMain。
因此,如果我是正确的,这些都会添加到Windows操作系统的C语言编译器中。但是,如何实施?
例如,wmain将Unicode作为argv []获取,但是它将这些参数发送到程序中,因此.exe文件条目中是否有任何特殊字段表示windows将arguemnts作为unicode传递?感谢。
答案 0 :(得分:4)
Windows的现代版本内部使用UTF-16。因此,当您启动可执行文件时,所有命令行参数可能从一开始就作为UTF-16传递,并且链接到已启动应用程序的运行时库通过unscathed(如果使用wmain
)传递参数或转换它们自动进行本地编码(如果使用main
)。 (具体来说,这将由wmainCRTStartup
/ mainCRTStartup
完成,这是用于控制台Windows应用程序的实际入口点。)
答案 1 :(得分:2)
首先:一个迂腐的咆哮:wmain当然不会得到Unicode参数。任何特定编码的Unicode is defined independently。 wmain以猜测的Unicode,UTF-16的16位字符编码获取参数。我刚刚查看了微软关于wmain的文档以及它的链接,很明显微软在编写它时不知道Unicode是什么。
无论如何,程序的入口点由链接器定义。 C程序总是有一定数量的序言代码在main / wmain / WinMain / wWinMain之前运行。如果使用其中一个宽版本的main,则序言代码会将环境中的字符从它们所处的任何字符集转换为宽字符版本。