Heim > Backend-Entwicklung > C++ > Wie zeige ich die Konsolenausgabe in einem Windows C-Programm mit einem WinMain-Einstiegspunkt an?

Wie zeige ich die Konsolenausgabe in einem Windows C-Programm mit einem WinMain-Einstiegspunkt an?

Patricia Arquette
Freigeben: 2024-11-19 10:03:02
Original
521 Leute haben es durchsucht

How to Display Console Output in a Windows C   Program with a WinMain Entry Point?

Konsolentext in Windows C ausgeben

Native C-Programme, die unter Windows ausgeführt werden, können die Befehlszeilenschnittstelle verwenden, um die Konsolenausgabe anzuzeigen. Wenn der Einstiegspunkt des Programms jedoch als WinMain definiert ist, ist nicht sofort klar, wie die mit Standardausgabefunktionen wie std::cout gedruckten Daten angezeigt werden.

Lösung:

Es gibt mehrere Ansätze, um in diesem Szenario eine Konsolenausgabe zu erreichen:

1. Verwenden einer Umleitungsfunktion:

Implementieren Sie eine benutzerdefinierte Umleitungsfunktion, die Standard-E/A-Streams abfängt und an die Konsole weiterleitet. Hier ist ein Beispiel mit der Win32-API:

guicon.cpp

#include <windows.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <iostream>
#include <fstream>
using namespace std;

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

  AllocConsole();
  GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
  coninfo.dwSize.Y = MAX_CONSOLE_LINES;
  SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);

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

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

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

  ios::sync_with_stdio();
}
Nach dem Login kopieren

Dann fügen Sie diese Funktion in Ihr Programm ein und rufen Sie sie auf, bevor Sie Standardausgabefunktionen verwenden.

2. Konsolenausgabe in eine Datei umleiten:

Eine andere Möglichkeit besteht darin, die Konsolenausgabe in eine Datei umzuleiten, die dann mit einem Texteditor angezeigt werden kann. Dies kann durch Ändern der Befehlszeile des Programms erfolgen:

program.exe 1>output.txt 2>&1
Nach dem Login kopieren

In diesem Beispiel werden Standardausgabe und Standardfehler in die Datei „output.txt“ umgeleitet.

3 . Verwenden der bedingten Kompilierung:

Wenn Ihr Programm speziell auf Entwicklungs- oder Debugging-Umgebungen abzielt, können Sie die bedingte Kompilierung verwenden, um die Konsolenausgabe nur bei Bedarf einzubeziehen. Beispielsweise können Sie Ihre Konsolenausgabeanweisungen in #ifdef _DEBUG-Blöcke einschließen.

Beispielimplementierung:

test.cpp

#include <iostream>

#ifdef _DEBUG
int main() {
  std::cout << "Hello, world!" << std::endl;
  return 0;
}
#endif
Nach dem Login kopieren

Standardmäßig gibt dieses Programm nichts aus. Wenn es jedoch mit dem definierten Präprozessormakro _DEBUG kompiliert wird, wird „Hello, world!“ ausgegeben. zur Konsole.

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

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage