Umstieg MinGW -> VC

Thomasio

Erfahrenes Mitglied
Weil ich gerne GDI+ verwenden würde und ich die Einbindung von GDI+ in MinGW/GCC++ nicht auf die Reihe bekomme, habe ich mir gerade eben VisualStudioExpress 2012 runtergeladen.
Ich bin mir nicht sicher, ob ich es überhaupt verwenden will, aber ich wollte es mir wenigstens mal anschauen.

Ich war auch mit MinGW nie der grosse Experte, aber mit VC stehe ich gleich auf den ersten Blick vollkommen auf dem Schlauch.
Die IDE die ich mit MinGW verwendet habe (Code::Blocks) war recht einfach zu verstehen, da gab es beim Erstellen eines neuen Projekts genau eine main.cpp Datei mit dem Quelltext für ein simples leeres Fenster.
Mit VC bekomme ich 10 Dateien plus eine Liste von etwa 50 "externe Abhängigkeiten" und blicke nicht durch.
Das Allererste was ich normalerweise mache ist 32bit oder 64bit auswählen, dazu habe ich MinGW und MinGW-w64 installiert und wähle einfach aus.
In VC finde ich in der Hilfe eine Unmenge Text, die auf 1000 Details hinweis, unter welchen Umständen eine Anwendung als native 64bit Anwendung oder unter SYSWOW64 ausgeführt wird, aber da steht nicht das Geringste davon, wie ich überhaupt mal festlegen kann, ob ich denn eine 32bit oder eine 64bit Anwendung schreiben will.

Und dann der ganze .NET-Schwachsinn den die Welt nicht braucht, aber kein Wort darüber, wie man in VC eine Anwendung OHNE .NET erstellt.
Ich habe keine Lust alle meine User zu zwingen GB-weise Nonsens zu installieren, nur damit eine Minianwendung von mir auf dem PC läuft, von den DAU´s die die Installation von .NET gar nicht erst auf die Reihe bekommen und dann logischerweise mir die Schuld dafür geben wenn meine Anwendung nicht läuft mal nicht zu reden.

In kurz:
Gibt es irgendwo ein Tutorial für ganz blutige Anfänger zum Einstieg in VC?
 
// Offtopic:
Und dann der ganze .NET-Schwachsinn den die Welt nicht braucht, [...]

You are sooooo wrong....

// Offtopic end

Also grundsätzlich ist das überhaupt kein Problem mit Visual Studio. Es kommt ganz draufan was du auswählst als Projekt ob du bereits erstellte Dateien hast oder nicht. Wählst du ein Win32-Projekt aus (Fenster oder Konsole) wird bereits ein Grundgerüst erstellt um mit precompiled headers und unabhängig von charset (unicode und nicht unicode) zu arbeiten. Wenn du jedoch ein Leeres Projekt auswählst (General -> Empty Project) hast du auch nichts drin.

Die Externen Abhängigkeiten sind eine super Sache. Da hast du alle Header drin, die du direkt oder indirekt inkludierst. Damit kannst du sehr leicht herausfinden ob vielleicht die falsche Version eines Headers inkludiert wurde, wenn du irgendwo ein Problem hast. Grundsätzlich wirst du da aber nicht viel machen, schon gar nicht etwas ändern, das ist nicht der Sinn der Sache.

Wenn du von x86 auf x64 umstellen willst ist das auch relativ simpel:
Rechtsklick auf die Solution im Solution Explorer, dann hast du den Eintrag "Configuration Manager". Wenn du diesen öffnest erhälst du eine Liste mit deinem Projekten in der Solution und deren Konfiguration. Unter Platform kannst du auswählen welche Plattform verwendet werden soll. Ist die gewünschte nicht vorhanden kannst du sie erstellen indem du auf den Eintrag <new...> klickst und die entsprechende Plattform auswählst (x64 oder ARM). Der Rest wird von selber erledigt.
 
Ja, VS ist beim allerersten Start vielleicht ein wenig kompliziert.

Wenn du doch wieder auf MinGW/GCC umsteigen möchtest:
Welche Fehler erhälst du denn? Hast du dieses Tutorial schon gesehen: http://www.codeproject.com/Tips/75491/GDI-Programming-With-MinGW


@Offtopic: NET
.NET ist oft schon installiert und wirklich sehr funktionsreich. Ich bin zwar kein C#, F#, etc.-Mensch, aber alleiniges Experimentieren mit PowerShell zeigt dir, dass .NET eine solide Basis ist!​
 
@ComFreek
Ja, den Link hatte ich gesehen, da stehen so Anmerkungen drin wie: "In addition to these issues of headers and libraries, there are some quirks to the GDI+ documentation on MSDN and many other sites which tend to hinder GDI+ programming in non-managed C++."
Das hat mich abgeschreckt, weil ich noch nicht mal verstehe, was mir das sagen soll.

@Cromon
Danke für die Hinweise, das muss ich direkt ausprobieren.

@Alle
Jetzt habe ich ein wirklich blödes Problem mit MinGW.
Ich habe eine Anwendung, die via ShellExecuteEx() eine andere Anwendung aufruft und ihr ein paar Parameter mitgibt (beide Anwendungen UNICODE).

Code:
wstring MyParameters = L"Irgend,welche,Daten";
SHELLEXECUTEINFO ExecInfo = {0};
ExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ExecInfo.fMask = SEE_MASK_FLAG_NO_UI;
ExecInfo.hwnd = 0;
ExecInfo.lpVerb = L"open";
ExecInfo.lpFile = L"Meine.exe";
ExecInfo.lpParameters = MyParameters.c_str();
ExecInfo.nShow = SW_SHOWNORMAL;
if(!ShellExecuteEx(&ExecInfo))
  {
      // Error
  }

In der anderen Anwendung mache ich dann

Code:
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int nCmdShow)
{

string x(szCmdLine);

}

Das hat bis heute prima funktioniert, aber seit ich VisualStudio installiert habe ist szCmdLine leer.
Mache ich GetCommandLine() bekomme ich nach wie vor den gesamten Aufruf

LW:/Pfad/Meine.exe Irgend,welche,Daten

nur in szCmdLine sind die Parameter nicht drin.
Was habe ich da vermurkst?
 
Hm, das ist merkwürdig, ich habe dieses Verhalten nicht...

Application 1:
C++:
	SHELLEXECUTEINFOW shex = { 0 };
	shex.cbSize = sizeof(shex);
	shex.lpFile = L"OtherApp.exe";
	shex.lpParameters = L"-i -o -p";
	shex.lpVerb = L"open";
	
	ShellExecuteExW(&shex);

Application 2:
C++:
BOOL WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR cmdLine, INT) {
	MessageBox(nullptr, cmdLine, "", MB_OK);
}

-> MessageBox mit -i -o -p
 
Ich kann es mir auch nicht erklären, aber nach 5 Jahren Funktion ohne Probleme muss definitiv irgendwas in der Installation von VS irgendwas verändert haben, wenn ich nur wüsste was.

Allerdings habe ich letzte Nacht noch einen weiteren Grund herausgefunden, warum MinGW nicht mehr ganz das Wahre ist.
WINAPI WinMain() ist mittlerweile veraltet, aber MinGW kommt mit APIENTRY _tWinMain() nicht klar, bzw. nur sehr umständlich.
Vielleicht sollte ich mich einfach ins Abenteuer stürzen und mich auf VC konzentrieren?

Vorausgesetzt dass ihr hier nichts gegen ein paar weitere ganz blöde Fragen in den nächsten Tagen habt?

Edit: Hier kommt gleich die Erste:
Offensichtlich kann VS2012 keine Anwendungen für XP erstellen, das kann nur VS2010.
Der Blog dazu bei M$ ist voll von Kommentaren, die das als lächerlich ansehen, aber seis drum.
Ich habe sogar rausgefunden, dass ich den VS2010 Compiler in VS2012 nutzen könnte um doch noch rückwärts kompatible Anwendungen zu erstellen, nur in den Projekteigenschaften gibt es die Auswahl nicht.
Wie also installiere ich den 2010 Compiler in VS2012?
 
Zuletzt bearbeitet:
Update:
In einem Anfall von Verzweiflung habe ich kurzerhand mein ganzes System neu aufgesetzt.
Dabei herausgefunden, dass es mittlerweile ein personal build von MinGW zum Download gibt, wo GDI+ schon eingebaut ist.
Auch mein Compiler läuft wieder ohne Probleme und damit lege ich meinen kurzen Ausflug zu VS zu den Akten.
Trotzdem vielen Dank für eure Hilfe.
 

Neue Beiträge

Zurück