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

WWinmain, Unicode и Mingw

Я работаю над изучением API окон и использую mingw в качестве моего компилятора с Code:: Blocks в качестве моей IDE. У меня возникла проблема с использованием функции wWinMain. Я использовал программу, расположенную здесь текст ссылки. Он компилируется отлично на VSС++ 2008 express, но при использовании mingw я получаю сообщение об ошибке "undefined для WinMain @16". Я выяснил, в чем проблема (я думаю). Заменив wWinMain только Winmain и указателем String PWSTR на LPSTR, он отлично компилируется. Мой вопрос в том, как я могу это исправить, а если нет, не использует Unicode, что большая сделка.

Спасибо.

4b9b3361

Ответ 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.