MFC-Anwendung und Konsole



  • Hi,

    hab eine Programm, was ich um ein paar Aufrufparamter ind der Kommandozeile erweitern will. Allerdings gibt's damit 2 Probleme:

    (1) Wie beende ich eine MFC-Anwendung korrekt?
    (2) Wie bekomme ich Ausgaben auf die Konsole?

    zu (1): Bei exit() bekomme ich speicherlecks. Ich überprüfe die Kommandozeilenargumente und will ggf. das Programm beenden, ohne die Oberfläche zu laden. Verwende InitApplication() dazu.

    zu (2): std::cout funzt net. Gibt's Alternativen?

    Danke, :xmas1:
    don_basto.



  • Hast du eine Konsolenanwendung mit MFC-Unterstützung? Oder eine SDI oder MDI oder Dialoganwendung? 😕



  • don_basto schrieb:

    (1) Wie beende ich eine MFC-Anwendung korrekt?

    http://support.microsoft.com/kb/117320/en-us

    don_basto schrieb:

    (2) Wie bekomme ich Ausgaben auf die Konsole?

    Ich dachte Du hast eine WIndows-GUI Programm? Woher hast Du denn denn die Konsole? Falls Du sie mit AllocConsole erzeugst hast, siehe:
    http://support.microsoft.com/kb/105305/en-us



  • @estartu:
    Ist ein SDI-Anwendung.
    Bei Konsolenanwendung wär's kein Problem, aber das MFC durchschau ich nicht.

    @Jochen:
    Ich rufe meine MFC-Anwendung über die Konsole auf und möchte ein paar Parameter mitgeben.



  • zu (1): Bei exit() bekomme ich speicherlecks. Ich überprüfe die Kommandozeilenargumente und will ggf. das Programm beenden, ohne die Oberfläche zu laden. Verwende InitApplication() dazu.

    Gib in InitInstance einfach FALSE zurück, wenn die Parameter dir "nicht gefallen".

    Wozu willst du Ausgaben auf der Konsole machen? Auf welcher überhaupt (Du hast doch keine bei einer SDI)? 😕



  • estartu schrieb:

    Wozu willst du Ausgaben auf der Konsole machen? Auf welcher überhaupt (Du hast doch keine bei einer SDI)? 😕

    Gute Frage. 🙂 Ich will eine Art Rückmeldung über die Parameter geben, falls Fehler auftreten und Anwendung nicht startet. Das Problem ist eben, das eine MFC-Anwendung keine Konsole hat. Aber wenn man eine MFC-Anwendung von der Konsole startet und noch vor dem Darstellen der Fenster abbricht, landet man wieder auf der Konsole und dann hat man mehr oder weniger eine Konsole. 🙂



  • don_basto schrieb:

    Ich rufe meine MFC-Anwendung über die Konsole auf und möchte ein paar Parameter mitgeben.

    Du kannst auf dieser Console nichts ausgeben... Dein Programm weiss gar nichts von einer Console...
    Die Parameter bekommst Du ja mit
    CWinApp::ParseCommandLine
    oder auch mit GetCommandLine

    Falls Du tatsächlich was auf der gestarteten Console ausgeben willst, ist die AFAIK einzige Möglichkeit, dass Du zwei EXEn erzeugst... eine Consolen-Anwendung, welche Du dann umbenennst nach *.com und eine GUI-Anwendung, die dann von der Consolen-Anwendung gestartet wird.
    Wird nun Dein Programm aus der Console aufgerufen, so wird die COM-ausgeführt und Du hast auch zugriff auf die Console... wenn es z.B. über den Explorer aufgerufen wird (z.B: eine assoziierte Datei), dann musst Du die EXE aufrufen...

    Du kannst natürlich auch versuchen die Console zu finden und mit AttachConsole an die Ausgabe zu kommen... das ist aber IMHO sehr schlecht, da die Console ja schon längst wieder für Benutzereingaben zur Verfügung steht und somit schon wieder was ganz anderes anzeigen kann und der Benutzer sehr verwirrt ist wenn Du da einfach was ausgibst...



  • don_basto schrieb:

    Ich will eine Art Rückmeldung über die Parameter geben, falls Fehler auftreten und Anwendung nicht startet.

    Wie wäre es mit AfxMessageBox? 🙂



  • @Jochen:
    Dann verwerfe ich erstmal die Konsolenausgabe. Hab nicht geahnt, dass es so kompliziert ist.

    @estartu:
    Gute Idee. 👍


Anmelden zum Antworten