Maison > développement back-end > C++ > le corps du texte

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

DDD
Libérer: 2024-11-20 16:04:15
original
525 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!

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