2010-08-26 16 views
9

Ich arbeite am Erlernen der Windows-API und verwende Mingw als meinen Compiler mit Code :: Blocks als meine IDE. Ich bin auf ein Problem mit der Verwendung der Funktion wWinMain gestoßen. Ich habe das Programm hier link text verwendet. Es kompiliert gut auf VSC++ 2008 Express, aber wenn ich mingw verwende, bekomme ich den Fehler "undefinierter Verweis auf WinMain @ 16". Ich habe herausgefunden, was das Problem ist (denke ich). Durch das Ersetzen der WinMain mit nur Winmain und dem String-Zeiger PWSTR mit LPSTR kompiliert es perfekt. Meine Frage ist, wie kann ich das beheben, und wenn nicht, ist nicht Unicode, dass große Sache.wWinmain, Unicode und Mingw

Danke.

Antwort

12

Verwenden Sie die einfache (nicht Unicode) WinMain Funktion, und dann erhalten Sie Ihre Unicode-Befehlszeile mit GetCommandLineW. MinGW weiß nicht über wWinMain.

Sie werden wahrscheinlich die Arbeit an MinGW schwierig finden; last time I used it it did not support most of the wchar_t components of the C++ standard library (i.e. std::wifstream, std::wstring, etc), die Schnittstellen mit Unicode Windows Bits erschwert.

Haben Sie etwas gegen MSVC?

+0

Ich habe nichts gegen MSVC, nur ich dachte, man kann Software, die Sie mit der Express-Ausgabe machen, nicht veröffentlichen. Obwohl ich weit von diesem Punkt entfernt bin, möchte ich legal sein können, wenn ich kann. – contrapsych

+7

@JAKE: Es gibt keine Einschränkungen hinsichtlich der Art von Software, die Sie mit MSVC Express Editions erstellen können. Der einzige Unterschied zwischen den Voll- und Express-Editionen besteht darin, dass die Vollversionen * signifikant * mehr Funktionen haben, wie die Möglichkeit, MSVC-Plugins zu installieren (z. B. Visual Assist X). Aber es gibt keine Einschränkung für den kompilierten Code - er kommt in keinem Fall aus Visual Studio, sondern aus dem Windows SDK. –

+0

Oh, zeigt, was ich alles weiß, danke, ich denke, ich werde wahrscheinlich VS dann verwenden. – contrapsych

19

Für alte Versionen von MinGW, können Sie einen Wrapper verwenden:

mingw-Unicode-main:

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

Einfache Wrapper wmain und wWinMain Unterstützung in MinGW

hinzufügen

Diese Wrapper ermöglichen die Verwendung von wmain/wWinMain in MinGW nahtlos mit Unicode (WCHAR), regulären (CHAR), oder die Möglichkeit,zu wählen(TCHAR).

Die Anweisungen für die Verwendung sind in den Dateien. Werfen Sie auch einen Blick auf andere Programme, die sie verwenden.


Für neue Versionen von MinGW, sollten Sie die -municode Option verwenden, wie es in dem mingw-Unicode-Haupt readme sagt:

Hinweis: Dies ist nicht mehr als MinGW verwendet werden soll hat jetzt eine eingebaute Lösung. Fügen Sie -municode zur Befehlszeile hinzu (und möglicherweise extern "C" zur wmain Funktion).

Die Option funktioniert mit MinGW-w64. In 2012-07, als ich MinGW probierte, hatte es die Option nicht.

Hier ist, wie MinGW-w64 zu installieren:

Ziel Win32:

Ziel Win64:


Unicode-Fragen:

+3

Es könnte sich lohnen, hinzuzufügen, dass "-municode" eine *** Linker-Einstellung ** ist. –

1

Ich weiß, dass ich statt zu antworten kommentiert haben sollte, aber ich tun nicht genug Ruf haben.

Ich möchte hinzufügen, dass ich die Links zu EXE-Dateien in [Einstellungen> Compiler ...> Toolchain Executables> Programme] ändern musste, um die Version von Community zu erhalten.

Auch meine CodeBlocks von 2016 behaupteten, dass es Unicode war, aber die Option -municode funktionierte nicht, nur das MiniGW Update auf die Version von Community arbeitete.

Wenn Sie main anstelle von wmain erneut verwenden möchten, müssen Sie die Option -municode löschen.