3

我已经阅读了几篇关于不同 Windows C 入口点 wmain 和 WinMain 的文章。

因此,如果我是正确的,这些将被添加到 Windows 操作系统的 C 语言编译器中。但是,如何实施?

例如,wmain 将 Unicode 获取为 argv[],但它的 Os 将这些参数发送给程序,那么 .exe 文件条目中是否有任何特殊字段告诉 windows 以 unicode 的形式传递参数?谢谢。

4

2 回答 2

4

现代版本的 Windows 在内部使用 UTF-16。因此,当您启动可执行文件时,所有命令行参数可能从一开始就作为 UTF-16 传递,链接到已启动应用程序的运行时库要么毫发无伤地传递参数(如果使用wmain),要么自动将它们转换为本地编码(如果使用main)。(具体来说,这将由wmainCRTStartup/来完成,mainCRTStartup它是用于控制台 Windows 应用程序的实际入口点。)

于 2010-08-24T10:51:47.770 回答
2

首先:一个迂腐的咆哮: wmain 当然没有得到 Unicode 参数。 Unicode 的定义独立于任何特定的编码。wmain 以 Unicode 的 16 位字符编码(猜测为 UTF-16)获取参数。我刚刚检查了微软关于wmain的文档以及其中的链接,很明显,微软在编写 Unicode 时并不知道 Unicode 是什么。

无论如何,程序的入口点是由链接器定义的。AC 程序在 main/wmain/WinMain/wWinMain 之前总是有一定数量的序言代码。如果使用 main 的宽版本之一,则序言代码将环境中的字符从它们所在的任何字符集转换为宽字符版本。

于 2010-08-24T10:43:10.143 回答