wWinmain, Unicode и Mingw

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

Благодарю.

3 ответа

Решение

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

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

У вас есть что-нибудь против MSVC?

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

MinGW-Юникод-главный:

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

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

Эти оболочки позволяют беспрепятственно использовать wmain / wWinMain в MinGW с Unicode (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:

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

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

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

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

Другие вопросы по тегам