Подтвердить что ты не робот

Разница между WinMain и wWinMain

Единственное различие заключается в том, что Winmain принимает char * для параметра lpCmdLine, а wWinMain принимает wchar_t *.

В Windows XP, если запись приложения является WinMain, Windows конвертирует командную строку из Unicode в Ansi и переходит к приложению?

Если параметр командной строки должен быть в Юникоде (например, имя файла Unicode, преобразование приведет к отсутствию некоторых символов), означает ли это, что я должен использовать wWinMain в качестве функции ввода?

4b9b3361

Ответ 1

В Windows XP, если запись приложения является WinMain, Windows конвертирует командную строку из Unicode в Ansi и переходит к приложению?

Да.

Если параметр командной строки должен быть в Юникоде (например, имя файла Unicode, преобразование приведет к отсутствию некоторых символов), означает ли это, что я должен использовать wWinMain в качестве функции ввода?

Да, вы должны, если хотите правильно обрабатывать аргументы Unicode в своей программе.

Документация к WinMain() в MSDN также согласна.

Однако вы можете использовать GetCommandLineW для извлечения командной строки в Юникоде.

Ответ 2

WinMain/wWinMain не является реальной точкой входа Windows. Windows просто вызывает функцию, указанную в заголовке PE с нулевыми параметрами.

При использовании цепочки инструментов Microsoft это void WinMainCRTStartup() { ... }, когда вы создаете приложение GUI, и оно предоставляется вам, если вы не связываетесь с /Zl.

По умолчанию код WinMainCRTStartup, созданный Visual С++, инициализирует библиотеку времени выполнения C, вызывает глобальные конструкторы (если есть), а затем вызывает вашу функцию WinMain/wWinMain с HINSTANCE от GetModuleHandle(NULL), командной строки из GetCommandLineA/W() (пропуская над именем файла в командной строке) и команду show из GetStartupInfo.

Единственная разница между WinMain и wWinMain - это строка командной строки, и вы должны использовать wWinMain в приложениях Unicode (и все приложения, созданные в эти дни, должны использовать Unicode). Конечно, вы можете вручную вызвать GetCommandLineW() в WinMain и проанализировать его самостоятельно, если вы действительно этого хотите.

В Windows NT/2000/XP и более поздняя строка командной строки является строкой Unicode внутри, а WinMain/GetCommandLineA() дает вам преобразованную версию, которая может быть неспособна правильно представлять каждый символ. В Windows 95/98/ME это наоборот, но GetCommandLineW() всегда способен преобразовывать каждый символ из GetCommandLineA().

Ответ 3

Windows XP вверх по умолчанию является unicode! Таким образом, конверсия не требуется. Загрузчик Runtime С++ заботится о передаче аргумента в приложение. Стандартный API Win32 определяет, что главная запись - WinMain (...).