Konsolenanwendung mit MFC-Anwendung verbinden
-
Hi,
ich habe zwei Projekte, ein ist mit MFC (eine Oberfläche, dialogbasierend) erzeugt. Das zweite ist eine Konsolenanwendung. Jetzt möchte ich beide in eine Mappe bringen, d.h. alle Klassen der Konsolenanwendung in die Mappe der MFC-Anwendung umlegen. Die Oberfläche wird gezeigt, aber ich möchte gerne, dass die Ausgaben, die ich mit 'cout' in der Konsolenanwendung habe, auch irgendwie gezeigt werden. Kann ich sie in einem Textfensterchen ausgeben? Oder im Debugfenster? Im Debugfenster kann man Daten mit 'TRACE' ausgeben. Aber man sieht sie nicht laufend, also, nur wenn Debugging beendet wird.
Und wo soll ich meine vorherige (aus der Konsolenanwendung) main-Fktn. schreiben?
-
Wenn du die Ausgaben dauernd sehen willst, musst du entweder selber was schreiben oder die Fenster so hinschieben, dass du wieder beides siehst.
Das aus der Main würde ich da hin packen, wo es Sinn macht.

Evtl. in die InitInstance? Oder soll das nur auf Knopfdruck laufen? Oder ständig im Hingrund?
-
Ich hätte gerne meine 'cout'-Ausgaben im Hintergrund laufend. Weiß nicht, welche Möglichkeiten überhaupt gibt's.
-
Na, wenn es eh nur im Hintergrund sein muss, ist TRACE doch was für dich.

Oder brauchst du es auch später, wenn das Projekt beim "Kunden" läuft? (Im Release Modus?)Die Ausgaben erscheinen nämlich ständig in der Entwicklungsumgebung sobald du F5 gedrückt hast. Du kannst also auch einfach mittendrin hinschalten.
Schau da mal: http://www.c-plusplus.net/forum/viewtopic-var-t-is-120832.htmlSonst gibt es vielleicht bei Codeproject.com was. Alles andere musst du selber entwickeln.
-
Wenn ich F5 drücke, erscheint zuerst meine Oberfläche, auf der man Daten konfigurieren kann. Nach dem ich das Button 'OK' drücke, kann ich an einer externen Anwendung erkennen, das meine Konsolenanwendung, die ich in InitInstance() umgelegt habe, läuft.
Genau das wünschte ich mir! Aber die Ausgaben, die sie erzeugt, sehe ich nicht. Wäre schön, wenn diese Ausgaben später beim Kunden zu sehen sind.
-
Probier mal
AllocConsole(); freopen("conin$", "r", stdin); freopen("conout$", "w", stdout); freopen("conout$", "w", stderr);und jetzt einfach
std::cout("Hello world");Quelle:
http://visualcpp.net/index.php?qID=66
http://www.codeguru.com/Cpp/V-S/debug/article.php/c1249MfG Tom
-
Und noch etwas. Können beide gleichzeitig laufen?
Meine Oberfläche und die Konsolenanwendung? Jetzt wird zuerst die Oberfläche geöffnet, esrt nach dem Drücken des Buttons erkennt man, dass die andere aktiv ist.TokTom schrieb:
Probier mal
AllocConsole(); freopen("conin$", "r", stdin); freopen("conout$", "w", stdout); freopen("conout$", "w", stderr);und jetzt einfach
std::cout("Hello world");Quelle:
http://visualcpp.net/index.php?qID=66
http://www.codeguru.com/Cpp/V-S/debug/article.php/c1249MfG Tom
Wo soll ich das reinbringen? In der App-Datei?
-
TokTom schrieb:
Probier mal
[code]
AllocConsole();
freopen("conout$", "w", stdout);
[code]MfG Tom
Das funktioniert wunderbar!
Tausend Dankeschön!
Bleibt nur beide gleichzeitig zu haben!
-
Wie genau meinst du das "gleichzeitig"?
Wäre evtl ein Thread was für dich oder ein Timer? (Schau dazu mal in die FAQ.)
-
Einfach nur den
AllocConsole code in die CDialog::OnInitDialog() Funktion deines Hauptdialogs einfügen.
Dann erscheint die Konsole und die MFC Oberfläche gleichzeitig.MfG Tom
-
OK, alles funktioniert super.
Nun brauche ich die konfigurierte Daten aus der Oberfläche an die Konsolenanwendung übergeben. Die Asführung der Konsolenanwendung ist in der InitInstance() implementiert. Die Textdatei mit Daten aus der Oberfläche wird in der OnOK() geschrieben und in der OnInitDialog() gelesen. Das sind also zwei verschiedene Klassen: MeineKlasseApp und MeineKlasseDlg. Eigentlich muss es nicht schwer sein, aber ich bremse...