wWinmain, Unicode и Mingw - PullRequest
       21

wWinmain, Unicode и Mingw

14 голосов
/ 26 августа 2010

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

Спасибо.

Ответы [ 3 ]

24 голосов
/ 29 июля 2012

Для старых версий MinGW вы можете использовать оболочку:

MinGW-юникод-главная:

https://github.com/coderforlife/mingw-unicode-main/

Простые оболочки для добавления поддержки wmain и wWinMain в MinGW

Эти оболочки позволяют без проблем использовать wmain / wWinMain в MinGW. с Юникодом (WCHAR), обычным (CHAR) или возможностью выбора (TCHAR).

Инструкции по их использованию находятся в файлах. Также взгляните на другие программы, которые их используют.


Для новых версий MinGW вы должны использовать опцию -municode, как сказано в файле readme для mingw-unicode-main:

Примечание: это больше не должно использоваться, поскольку MinGW теперь имеет встроенный решение. Добавьте -municode в командную строку (и, возможно, extern "C" к функции wmain).

Опция -municode работает с MinGW-w64. В 2012-07 году, когда я попробовал MinGW, у него не было опции -municode.

Вот как установить MinGW-w64:

Цель Win32:

Цель Win64:


Вопросы, связанные с Unicode:

15 голосов
/ 26 августа 2010

Используйте обычную (не Unicode) функцию WinMain, а затем получите командную строку Unicode, используя GetCommandLineW.MinGW не знает о wWinMain.

Возможно, вам будет трудно работать над MinGW; в прошлый раз, когда я использовал его, он не поддерживал большинство wchar_t компонентов стандартной библиотеки C ++ (например, std::wifstream, std::wstring и т. Д.) , что затрудняло взаимодействие с битами Unicode Windows.

Есть ли у вас что-либо против MSVC?

3 голосов
/ 28 января 2018

Я знаю, что я должен был прокомментировать, а не отвечать, но у меня недостаточно репутации.

Я хочу добавить, что мне пришлось изменить ссылки на исполняемые файлы в [Настройки> Компилятор ...> Исполняемые файлы цепочки инструментов> Программные файлы], чтобы запустить версию Community.

Также мои CodeBlocks от 2016 года утверждали, что это был Unicode, но опция -municode не работала, сработало только обновление MiniGW до версии от Community.

Если вы хотите использовать mainвместо wmain вы должны удалить опцию -municode.

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