Programm ohne Konsole Starten



  • Hallo,
    zur Zeit Programmiere ich in C++ mit OpenGL habe auch schon eine Anwendung geschrieben, nun die Frage die Anwendung startet ganz normal und öffnet ein Fenster in der mit OpenGL etwas erstellt wurde wenn ich das Programm starte wird im Hintergrund immer die Konsole mit geöffnet (unter windows die cmd) wie kann ich verhindern das nur die eigenliche Application ohne Konsole gestartet wird?

    IDE: Netbenas
    Sprache: C++



  • Indem du deine .exe für das Subsystem Windows baust und nicht für Console. Frag mich aber nicht, wie du Netbeans und welchen Compiler auch immer du verwendest das beibringst...



  • Unter Windows tragen die ausführbaren Dateien eine Information mit sich, unter welchem Subsystem sie ausgeführt werden sollen. Beim "Console"-Subsystem wird dabei immer noch ein Konsolenfenster für die Anwendung geöffnet.
    Du hast zwar nicht geschrieben, welchen Compiler/Linker du verwendest, ich vermute aber, dass es sich dabei wahrscheinlich um GCC/GNU-ld handelt. Versuche es mal, indem du in deiner IDE bei den Kommandozeilenoptionen für den Compiler noch folgendes hinzufügst:

    -Wl,--subsystem,windows

    Damit wird der Linker angewiesen, die ausführbare Datei für das Subsystem "Windows" zu erstellen, also ohne Konsolenfenster. Der Linker von Visual Studio hat da eine ganz ähnliche Option: /SUBSYSTEM:WINDOWS .

    Hinweis: Das Konsolenfenster könnte auch eine Funktion der IDE sein, und von dieser geöffnet werden. Wenn das der Fall ist, solltest du mal deine IDE-optionen nach einer entsprechenden Einstellung durchstöbern.

    Gruss,
    Finnegan



  • Hi,
    Danke für eure Antworten also als Compiler kommt MinGW zum einsatz.



  • Wenn du jedoch den Visual Studio Compiler nutzen möchtest irgendwann oder so. Dann kannst du auch einfach (musst du sowieso machen auch wenn du das dem Linker erzählst) die main() Funktion umändern in:

    #include <Windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    
        return 0;
    }
    

    Dies ist jedoch nicht Standard C++ und ist auch nicht portabel, aber es wird verlangt.


Anmelden zum Antworten