Maison >développement back-end >C++ >Comment afficher la sortie de la console dans un programme Windows C avec un point d'entrée WinMain ?

Comment afficher la sortie de la console dans un programme Windows C avec un point d'entrée WinMain ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-19 10:03:02523parcourir

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

Sortie du texte de la console dans Windows C

Les programmes natifs C exécutés sous Windows peuvent utiliser l'interface de ligne de commande pour afficher la sortie de la console. Cependant, si le point d'entrée du programme est défini comme WinMain, il n'est pas immédiatement évident de savoir comment afficher les données imprimées à l'aide de fonctions de sortie standard telles que std::cout.

Solution :

Il existe plusieurs approches pour obtenir une sortie console dans ce scénario :

1. Utilisation d'une fonction de redirection :

Implémentez une fonction de redirection personnalisée qui intercepte les flux d'E/S standard et les achemine vers la console. Voici un exemple utilisant l'API Win32 :

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();
}

Ensuite, incluez cette fonction dans votre programme et appelez-la avant d'utiliser les fonctions de sortie standard.

2. Redirection de la sortie de la console vers un fichier :

Une autre option consiste à rediriger la sortie de la console vers un fichier, qui peut ensuite être visualisé à l'aide d'un éditeur de texte. Cela peut être fait en modifiant la ligne de commande du programme :

program.exe 1>output.txt 2>&1

Dans cet exemple, la sortie standard et l'erreur standard sont redirigées vers le fichier "output.txt".

3 . Utilisation de la compilation conditionnelle :

Si votre programme cible spécifiquement les environnements de développement ou de débogage, vous pouvez utiliser la compilation conditionnelle pour inclure la sortie de la console uniquement lorsque cela est nécessaire. Par exemple, vous pouvez envelopper les instructions de sortie de votre console dans des blocs #ifdef _DEBUG.

Exemple d'implémentation :

test.cpp

#include <iostream>

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

Par défaut, ce programme ne produira rien. Cependant, une fois compilé avec la macro du préprocesseur _DEBUG définie, il affichera « Hello, world ! » à la console.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn