Maison > développement back-end > C++ > Comment afficher la sortie de la console dans un programme Windows natif en C ?

Comment afficher la sortie de la console dans un programme Windows natif en C ?

DDD
Libérer: 2024-11-20 16:04:15
original
641 Les gens l'ont consulté

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

Affichage de la sortie de la console dans un programme Windows C natif

Dans les programmes Windows C utilisant le point d'entrée WinMain, sortie de la console générée par des fonctions telles que std : :cout peut ne pas être visible par défaut. En effet, les applications d'interface utilisateur graphique (GUI) ne sont généralement pas associées à une fenêtre de console.

Solutions :

1. Attachez une console à l'application :

  • Utilisez la fonction AllocConsole() pour créer une nouvelle fenêtre de console pour votre programme.
  • Redirection de l'entrée standard (STDIN), sortie ( STDOUT) et l'erreur (STDERR) sont diffusées vers la nouvelle console à l'aide de fonctions telles que _open_osfhandle() et _fdopen().

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

  • Si vous ne pouvez pas modifier la base de code, vous pouvez toujours afficher la sortie de la console en la redirigeant vers un fichier texte.
  • Utilisez FreeConsole( ) pour libérer le handle de la console.
  • Appelez OutputDebugString() pour rediriger la sortie vers le fichier, qui peut être visualisé à l'aide d'un outil de débogage tel que DebugView.

Exemple de code utilisant la redirection de console :

L'extrait de code suivant montre comment attacher une console à un programme Windows et y rediriger les flux :

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

Inclure En-tête :

#include "guicon.h"
Copier après la connexion

Utilisation :

#ifdef _DEBUG
    RedirectIOToConsole();
#endif
Copier après la connexion

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal