main() statt WinMain()?



  • Hallo! Ich möchte ein Programm schreiben das abhängig von den übergebenen parametern entweder als konsolenprogramm oder als windowsanwendung gestartet wird. Ist sowas möglich?
    shutdown.exe kann das ja auch:
    shutdown -i
    oder besseger gefragt:
    wie kann ich aus winmain in die console schreiben?
    wenn ich <iostream.h> einbinde und dann per cout was ausgeben möchte aus WinMain, geht das nicht. wie würde es denn gehen?



  • Ja das ist möglich, du musst mit der WinMain beginnen und AllocConsole aufrufen um eine Konsole zu bekommen



  • Auch also Konsolen-Anwendung kannst Du ganz normal Fenster erzeugen und somit eine "Window-Anwendung" machen...

    Die meisten Applikationen gehen aber Folgenden Weg:

    Sie erzeugen eine Consolen-Anwendung und eine *separate* Windows-Anwendung.
    Die Consolen-Anwenundung wird dann nach *.com umbenannt. Beide heissen sozusagen gleich, aber wenn der Befehl in einer Console eingegeben wird, dann wird zuerst die *.com" gesucht... somit wird dann die "richtige" Consolen-Anwendung ausgeführt.

    ALs Beipsiel sie mir mal "devenv" (Visual Studio) aufgeführt.



  • Fencer schrieb:

    Ja das ist möglich, du musst mit der WinMain beginnen und AllocConsole aufrufen um eine Konsole zu bekommen

    dann gehen printf, scanf, etc. trotzdem noch nicht

    Jochen Kalmbach schrieb:

    Die meisten Applikationen gehen aber Folgenden Weg:
    Sie erzeugen eine Consolen-Anwendung und eine *separate* Windows-Anwendung.

    zwei getrennte .exen sind aber ziemlich doof
    🙂



  • sorry hat ich vergessen:
    du musst noch einen Auruf an die Funktion freopen machen

    AllocConsole();
    freopen("CONOUT$", "w", stdout);//bzw. : 
    /*
    FILE *stream
    freopen_s( &stream, "CONOUT$", "w", stdout );
    */
    //wenn der Compiler (VS) meckert
    
    std::cout << "Hallo liebe Welt";
    


  • Hallo!
    Ja das funktioniert!
    Die neue konsole wird erzeugt, aber leider nur schwarz. Wird nichts ausgegeben 😞
    kann ich auch mit cin daten empfangen bei der console?



  • der folgende code zeigt ganz kurz die console und schliesst sie wieder:
    Wenn ich aber vor return Sleep(10000); einfüge, wird die console 10 sekunden lang angezeigt. Aber warum geht cin nicht?

    //---------------------------------------------------------------------------
    
    #include <windows.h>
    #include <iostream.h>
    
    //---------------------------------------------------------------------------
    
    WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
            AllocConsole();
            char * huhu;
            cin>>huhu;
            cout << huhu;
            return 0;
    }
    //---------------------------------------------------------------------------
    




  • freopen..siehe oben
    einmal mit "CONOUT"undstdoutunddannnochmalmit"CONIN" und stdout und dann nochmal mit "CONIN" und stdin

    dann müßte es funktionieren

    oder natürlich wie in dem link mit WriteConsole.

    FILE *stream;
    int i=0;
    AllocConsole();
    //freopen("CONOUT$", "w", stdout);
    freopen_s( &stream, "CONOUT$", "w", stdout );
    freopen_s(&stream, "CONIN$","r",stdin);
    std::cout << "Hallo an die Welt"<<endl;
    std::cin>>i;
    cout<<i<<endl;
    Sleep(5000);
    

Anmelden zum Antworten