Mit std::cout etwas unter Windows ausgeben - wie?



  • Hallo,

    ich habe ein Projekt (mit Windows-VCL-Oberfläche).
    Der Einfachheit halber möchte ich an einigen Stellen innerhalb des Codes einige Variablen mit std::cout ausgeben. Es erscheint aber kein DOS-Fenster.

    Kann mir jemand sagen, warum? Vergesse ich eine Bibliothek oder so?
    <iostream> habe ich natürlich eingebunden.

    Danke.



  • Papp doch einfach irgendwo ein Memo auf's Form und schreib die Werte da hinein. Oder verwende den Debugger / Überwachte ausdrücke.

    Grüße Joe_M.



  • Mach doch mit fstream, und schreib deine Meldungen in eine Datei...



  • Nein, eben will ich ja nicht, will was über die Konsole ausgeben.
    Habe einen C++-Vektor mit einer eignen Klasse, mit Operatorüberladung << und so. Will das für die VCL anpassen, muss dafür aber ab und an mal was in der Konsole ausgeben.

    Bei euch gehts also auch nicht, oder? Bei euch erscheint, wenn ihr cout <<"bla" ausgebt, auch kein DOS-Fenster ...

    Mann, mann, mann, was ist das nur für ein Mist. Dafür MUSS es doch ne Lösung geben.



  • Es ist aber nunmal so, dass wenn du mit dem BCB eine VCL-Anwendung mit graphischer Oberflaeche erstellst, es keine Konsole gibt... Normalerweise nicht. Es gibt bestimmt Wege, wo du beides hast.. Mir faellt da spontan eine Konsolenanwendung ein, wo man das VCL-Fenster dynamisch erstellt... Habe aber keine Ahnung, ob das hinhauen wuerde... 🙄
    MfG Aoeke



  • @aoeke: hast du Code?



  • hallo,

    wenn es dir darum geht, z. b. einige variableninhalte etc. zur kontrolle auszugeben, dann kannst du "outputDebugString" verwenden... schau in der hilfe nach outputdebugstring...

    murph



  • Ich hab leider kein BCB, aber Du könntest mal versuchen per AllocConsole ein DOS-Fenster herbeizuzaubern.

    sr



  • Tja, ich war wohl der überzogenen und völlig maßlosen Ansicht/Hoffnung, dass man so etwas mit normalen Bordmitteln unter dem BCB hinbekommt. Wohin geht den der Aufruf cout...? Verschwindet der im Nirvana? Vielleicht muss man nur eine bestimmte Bibliothek einbinden. Die Hilfe hat mir leider auch nicht weiter geholfen.



  • cout etc. verschwinden tatsächlich im Datennirvana, /dev/null oder wie immer du das bezeichnen möchtest.

    Wie schon gesagt, du kannst AllocConsole verwenden:

    AllocConsole();
    
    extern unsigned long _handles[];
    _handles[0] = (unsigned int) GetStdHandle(STD_INPUT_HANDLE);
    _handles[1] = (unsigned int) GetStdHandle(STD_OUTPUT_HANDLE);
    _handles[2] = (unsigned int) GetStdHandle(STD_ERROR_HANDLE);
    
    cout << "blabla" << endl;
    

    Das funktioniert nur mit statisch gelinkter RTL, siehe auch hier.

    Fraglich bleibt nachwievor, warum es eine echte Konsole sein muss. Du könntest z.B. einfach die cout-Aufrufe deiner Klasse durch eine eigene Ausgabe-Funktion ersetzen, in der du je nach Gegebenheit entweder cout aufrufst oder eben in ein Memo o.ä. ausgibst.



  • Danke, Jansen.
    Sei geküsst <im übertragenen Sinne>.



  • 😮 😉

    Mehr gefreut hätte ich mich allerdings über eine schlüssige Begründung für die unbedingte Notwendigkeit der Konsolenausgabe.



  • Will ich dir gern sagen.
    Ich habe eine eigene Bruchklasse. Der neue Datentyp heißt bruch.
    mit bruch a = (-6,8) haste einen, alle Operatoren überladen usw
    Gekürzt wird auch automatisch. Habe alles mit dem VC++ auf DOS-Konsole entwickelt. Einziges Problem war die Rückgabe nicht als Bruch (das ging mit cout <<a), sondern als string.
    Denn: im StringGrid werden alle Werte eingegeben bzw. geladen. In einer Zelle steht z.B. 7/4. Das repräsentiert den Bruch. Ich lese das als AnsiString ein, muss es dann aufknacken in Zähler und Nenner und dann als 2-D-Vektor der Bruchklasse übergeben, damit damit gerechnet werden kann. Aber bei der Rückgabe ging iergend etwas schief. Die Rückgabe sollte als string erfolgen, damit das Ergebnis nicht als Bruch (cout geht ja nicht), sondern eben als string ausgegeben wird. Das zu testen war doof, weil ich erst das Rückgabeergebnis wieder umwandeln musste für die VCL. So kann ich jetzt das Ergebnis mit cout ausgeben und sehe, wo der Fehler liegt.
    Hoffe, habe mein Problem schildern können. 🙂



  • Ehrlich gesagt habe ich das nicht wirklich verstanden. Aber danke für den Erklärungsversuch. 😉

    Die OT-Diskussion zum BCB-Editor geht in einem eigenen Thread weiter.


Anmelden zum Antworten