Heim  >  Artikel  >  Backend-Entwicklung  >  Wie zeige ich die Konsolenausgabe in einem nativen C-Windows-Programm an?

Wie zeige ich die Konsolenausgabe in einem nativen C-Windows-Programm an?

DDD
DDDOriginal
2024-11-20 16:04:15526Durchsuche

How to Display Console Output in a Native C   Windows Program?

Anzeigen der Konsolenausgabe in nativen C-Windows-Programmen

In C-Windows-Programmen, die den WinMain-Einstiegspunkt verwenden, wird die Konsolenausgabe durch Funktionen wie std generiert: :cout ist möglicherweise standardmäßig nicht sichtbar. Dies liegt daran, dass Anwendungen mit grafischer Benutzeroberfläche (GUI) normalerweise kein Konsolenfenster zugeordnet ist.

Lösungen:

1. Fügen Sie der Anwendung eine Konsole hinzu:

  • Verwenden Sie die Funktion AllocConsole(), um ein neues Konsolenfenster für Ihr Programm zu erstellen.
  • Standardeingabe (STDIN) und Ausgabe umleiten ( STDOUT) und Fehler (STDERR) werden mithilfe von Funktionen wie _open_osfhandle() und an die neue Konsole gestreamt _fdopen().

2. Konsolenausgabe in eine Datei umleiten:

  • Wenn Sie die Codebasis nicht ändern können, können Sie die Konsolenausgabe trotzdem anzeigen, indem Sie sie in eine Textdatei umleiten.
  • Verwenden Sie die FreeConsole( )-Funktion zum Freigeben des Konsolenhandles.
  • Rufen Sie OutputDebugString() auf, um die Ausgabe in die Datei umzuleiten, die mit einem Debugging-Tool wie angezeigt werden kann DebugView.

Beispielcode mit Konsolenumleitung:

Der folgende Codeausschnitt zeigt, wie man eine Konsole an ein Windows-Programm anfügt und Streams dorthin umleitet:

void RedirectIOToConsole()
{
    int hConHandle;
    long lStdHandle;
    CONSOLE_SCREEN_BUFFER_INFO coninfo;
    FILE *fp;

    // Allocate a console for this app
    AllocConsole();

    // Set the screen buffer size for scrolling
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
    coninfo.dwSize.Y = 500;
    SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);

    // Redirect stdout
    lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen(hConHandle, "w");
    *stdout = *fp;
    setvbuf(stdout, NULL, _IONBF, 0);

    // Redirect stdin
    lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen(hConHandle, "r");
    *stdin = *fp;
    setvbuf(stdin, NULL, _IONBF, 0);

    // Redirect stderr
    lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen(hConHandle, "w");
    *stderr = *fp;
    setvbuf(stderr, NULL, _IONBF, 0);
}

Einschließen Kopfzeile:

#include "guicon.h"

Verwendung:

#ifdef _DEBUG
    RedirectIOToConsole();
#endif

Das obige ist der detaillierte Inhalt vonWie zeige ich die Konsolenausgabe in einem nativen C-Windows-Programm an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn