wmain vs main C runtime - PullRequest
       6

wmain vs main C runtime

3 голосов
/ 24 августа 2010

Я прочитал несколько статей о различных точках входа Windows C, wmain и WinMain.

Итак, если я прав, они добавлены в компиляторы языка C для ОС Windows.Но как это реализовано?

Например, wmain получает Unicode как argv [], но его Os, который отправляет эти аргументы в программу, есть ли какое-либо специальное поле в записи файла .exe, которое говорит Windows дляпередать аргумент как юникод?Спасибо.

Ответы [ 2 ]

4 голосов
/ 24 августа 2010

Современные версии Windows внутренне используют UTF-16. Поэтому, когда вы запускаете исполняемый файл, все аргументы командной строки, скорее всего, передаются как UTF-16 с самого начала, и библиотека времени выполнения, связанная с запущенным приложением, либо передает аргументы без изменений (если используется wmain), либо преобразовывает их в локальное кодирование автоматически (при использовании main). (В частности, это будет сделано с помощью wmainCRTStartup / mainCRTStartup, которые являются фактическими точками входа, используемыми для консольных приложений Windows.)

2 голосов
/ 24 августа 2010

Во-первых: педантичная напыщенная речь: wmain определенно не получает аргументы Unicode. Unicode определяется независимо от какой-либо конкретной кодировки.wmain получает аргументы в 16-битной кодировке Unicode, UTF-16 в предположении.Я только что проверил документацию Microsoft по wmain и ссылки на нее, и стало ясно, что Microsoft не имела ни малейшего представления о том, что такое Unicode, когда они это писали.

В любом случае, точка входапрограмма определяется компоновщиком.Программа AC всегда имеет определенный объем пролог-кода, который выполняется перед main / wmain / WinMain / wWinMain.Если используется одна из широких версий main, код пролога преобразует символы в среде из любого набора символов, в котором они находятся, в версию широких символов.

...