Home > Backend Development > C++ > body text

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

Patricia Arquette
Release: 2024-11-19 10:03:02
Original
465 people have browsed it

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

Outputting Console Text in Windows C

Native C programs running on Windows may utilize the command-line interface to display console output. However, if the program's entry point is defined as WinMain, it's not immediately obvious how to view data printed using standard output functions like std::cout.

Solution:

There are several approaches to achieve console output in this scenario:

1. Utilizing a Redirect Function:

Implement a custom redirection function that intercepts standard I/O streams and routes them to the console. Here's an example using the 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();
}
Copy after login

Then, include this function in your program and call it before using standard output functions.

2. Redirecting Console Output to a File:

Another option is to redirect console output to a file, which can then be viewed using a text editor. This can be done by modifying the program's command line:

program.exe 1>output.txt 2>&1
Copy after login

In this example, standard output and standard error are redirected to the "output.txt" file.

3. Using Conditional Compilation:

If your program specifically targets development or debugging environments, you can use conditional compilation to include console output only when necessary. For instance, you can wrap your console output statements in #ifdef _DEBUG blocks.

Example Implementation:

test.cpp

#include <iostream>

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

By default, this program will not output anything. However, when compiled with the _DEBUG preprocessor macro defined, it will print "Hello, world!" to the console.

The above is the detailed content of How to Display Console Output in a Windows C Program with a WinMain Entry Point?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template