代码之家  ›  专栏  ›  技术社区  ›  B.Gen.Jack.O.Neill

wmain与main c运行时

  •  3
  • B.Gen.Jack.O.Neill  · 技术社区  · 14 年前

    我读过一些关于不同windows c入口pooints、wmain和winmain的文章。

    所以,如果我是正确的,这些都会添加到Windows操作系统的C语言编译器中。但是,如何实现呢?

    例如,wmain将unicode作为argv[],但它的操作系统将这些参数发送到程序,那么.exe文件条目中是否有特殊字段告诉Windows将参数作为unicode传递?谢谢。

    2 回复  |  直到 13 年前
        1
  •  4
  •   jamesdlin    13 年前

    现代版本的Windows内部使用UTF-16。因此,当您启动一个可执行文件时,所有的命令行参数都可能从一开始就以UTF-16的形式传递,并且链接到启动的应用程序的运行库或者不受影响地传递参数(如果使用 wmain )或自动将其转换为本地编码(如果使用 main )(具体来说,这将由 wmainCRTStartup / mainCRTStartup 哪些是用于控制台Windows应用程序的实际入口点。)

        2
  •  2
  •   JeremyP    14 年前

    首先:一个学究式的咆哮:wmain当然不会得到unicode参数。 Unicode is defined independently 任何特定编码。wmain得到一个16位字符编码的unicode,utf-16的参数。我刚刚检查了微软的文档 wmain 很明显,微软在写Unicode时根本不知道它是什么。

    无论如何,程序的入口点是由链接器定义的。C程序总是在main/wmain/winmain/wwinmin之前运行一定数量的序言代码。如果使用了MAIN的宽版本之一,则序言代码将环境中的字符从其所在的任何字符集转换为宽字符版本。