WWinmain, Unicode и Mingw
Я работаю над изучением API окон и использую mingw в качестве моего компилятора с Code:: Blocks в качестве моей IDE. У меня возникла проблема с использованием функции wWinMain. Я использовал программу, расположенную здесь текст ссылки. Он компилируется отлично на VSС++ 2008 express, но при использовании mingw я получаю сообщение об ошибке "undefined для WinMain @16". Я выяснил, в чем проблема (я думаю). Заменив wWinMain только Winmain и указателем String PWSTR на LPSTR, он отлично компилируется. Мой вопрос в том, как я могу это исправить, а если нет, не использует Unicode, что большая сделка.
Спасибо.
Ответы
Ответ 1
Используйте функцию plain (non unicode) WinMain
, а затем получите свою командную строку юникода, используя GetCommandLineW
. MinGW не знает о wWinMain
.
Вероятно, вы столкнетесь с трудностями, связанными с MinGW; В прошлый раз, когда я использовал его, он не поддерживал большинство компонентов wchar_t
стандартной библиотеки С++ (т.е. std::wifstream
, std::wstring
и т.д.), которые сделали сопряжение с битами Unicode Windows сложно.
Есть ли у вас что-нибудь против MSVC?
Ответ 2
Для старых версий MinGW вы можете использовать обертку:
MinGW-Юникод-главный:
https://github.com/coderforlife/mingw-unicode-main/
Простые обертки для добавления поддержки wmain и wWinMain в MinGW
Эти обертки позволяют без труда использовать wmain/wWinMain в MinGW с Unicode (WCHAR), регулярным (CHAR) или возможностью выбора (TCHAR).
Инструкции по их использованию содержатся в файлах. Также взгляните на другие программы, которые их используют.
Для новых версий MinGW вы должны использовать опцию -municode
, как это говорится в главном readme в mingw-unicode:
Примечание. Это больше нельзя использовать, поскольку MinGW теперь имеет встроенный решение. Добавьте -municode в командную строку (и, возможно, extern "C" к функции wmain).
Опция -municode
работает с MinGW-w64. В 2012-07 годах, когда я попробовал MinGW, у него не было опции -municode
.
Вот как установить MinGW-w64:
Цель Win32:
Цель Win64:
Вопросы, связанные с Юникодом:
Ответ 3
Я знаю, что я должен был прокомментировать, а не отвечать, но мне не хватает репутации.
Я хочу добавить, что мне пришлось изменить ссылки на исполняемые файлы в [Настройки> Компилятор...> Исполняемые файлы набора инструментов> Программные файлы], чтобы запустить версию Сообщества.
Также мои CodeBlocks от 2016 года утверждали, что это был Unicode, но опция -municode
не работала, работало только обновление MiniGW до версии от Community.
Если вы хотите снова использовать main вместо wmain, вам нужно удалить опцию -municode.