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
Libérer: 2024-11-19 10:03:02
original
522 Les gens l'ont consulté

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();
}
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal