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:
Главная> Наборы инструментов для Win32 > Персональные сборки> rubenvb> gcc-4.7-release:
В Windows вы хотите "i686-w64-mingw32-gcc-4.7.2-release-win32_rubenvb.7z".
Извлеките папку в корень вашего диска.
Переименуйте папку "mingw32" в "MinGW-32".
Целевая Win64:
Главная> Наборы инструментов для Win64 > Персональные сборки> rubenvb> gcc-4.7-release:
В Windows вы хотите "x86_64-w64-mingw32-gcc-4.7.2-release-win32_rubenvb.7z".
Извлеките папку в корень вашего диска.
Переименуйте папку "mingw64" в "MinGW-64".
Вопросы, связанные с Unicode:
Я знаю, что я должен был прокомментировать, а не отвечать, но мне не хватает репутации.
Я хочу добавить, что мне пришлось изменить ссылки на исполняемые файлы в [Настройки> Компилятор... > Исполняемые файлы набора инструментов> Программные файлы], чтобы запустить версию Сообщества.
Также мой CodeBlocks из 2016 года утверждал, что это был Unicode, но опция -municode не работала, работало только обновление MiniGW до версии от Community.
Если вы хотите снова использовать main вместо wmain, вам нужно удалить опцию -municode.