Wmain VS Main C Runtime
Вопрос
Я прочитал несколько статей о различных входах Windows C Points, Wmain и WinMain.
Итак, если я правильно, они добавляются к языковым компиляторам для ОС Windows. Но как реализуются?
Например, WMAIN получает Unicode AS ARGV [], но его ОС, которая отправляет эти аргументы программе, поэтому есть ли специальное поле в записи файла .exe, которая говорит к Windows, чтобы пройти аргументы как Unicode? Спасибо.
Решение
Современные версии Windows Internall используют UTF-16. Следовательно, когда вы запускаете исполняемый файл, все аргументы командной строки, скорее всего, передаются как UTF-16 из начала, а библиотека времени выполнения, связанная с запущенным приложением, либо передает аргументы через невредительную (при использовании wmain
) или преобразует их в локальное кодирование автоматически (при использовании main
). (Конкретно это будет сделано wmainCRTStartup
/mainCRTStartup
которые являются фактическими точками входа, используемые для приложений для консоли Windows.)
Другие советы
Во-первых: педантичный разговор: Wmain, безусловно, не получает аргументы Unicode. Unicode определяется независимо какого-либо конкретного кодирования. WMAIN получает аргументы в 16 битном символьном кодировке Unicode, UTF-16 на предположение. Я только что проверил документацию Microsoft на WMAIN И ссылки от нее и понятно, что Microsoft не имела никакой подсказки о том, какой Unicode, когда они его написали.
В любом случае, точка входа программы определяется линкером. Программа переменного тока всегда имеет определенное количество пролого-кода, которое работает до Main / Wmain / WinMain / Wwinmain. Если используется одна из широких версий основных, код пролога преобразует символы в среду из любого набора символов, в которых они находятся в широкой версии символов.