>백엔드 개발 >C++ >WinMain 진입점을 사용하여 Windows C 프로그램에서 콘솔 출력을 표시하는 방법은 무엇입니까?

WinMain 진입점을 사용하여 Windows C 프로그램에서 콘솔 출력을 표시하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-19 10:03:02523검색

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

Windows C에서 콘솔 텍스트 출력

Windows에서 실행되는 기본 C 프로그램은 명령줄 인터페이스를 활용하여 콘솔 출력을 표시할 수 있습니다. 그러나 프로그램의 진입점이 WinMain으로 정의된 경우 std::cout과 같은 표준 출력 기능을 사용하여 인쇄된 데이터를 보는 방법이 즉시 명확하지 않습니다.

해결책:

이 시나리오에서는 콘솔 출력을 얻기 위한 여러 접근 방식이 있습니다.

1. 리디렉션 기능 활용:

표준 I/O 스트림을 가로채서 콘솔로 라우팅하는 사용자 지정 리디렉션 기능을 구현합니다. 다음은 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();
}

그런 다음 이 함수를 프로그램에 포함시키고 표준 출력 함수를 사용하기 전에 호출하세요.

2. 콘솔 출력을 파일로 리디렉션:

또 다른 옵션은 콘솔 출력을 파일로 리디렉션한 다음 텍스트 편집기를 사용하여 볼 수 있는 것입니다. 이는 프로그램의 명령줄을 수정하여 수행할 수 있습니다.

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

이 예에서 표준 출력 및 표준 오류는 "output.txt" 파일로 리디렉션됩니다.

3 . 조건부 컴파일 사용:

프로그램이 특별히 개발 또는 디버깅 환경을 대상으로 하는 경우 조건부 컴파일을 사용하여 필요한 경우에만 콘솔 출력을 포함할 수 있습니다. 예를 들어 콘솔 출력 문을 #ifdef _DEBUG 블록으로 래핑할 수 있습니다.

구현 예:

test.cpp

#include <iostream>

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

기본적으로 이 프로그램은 아무것도 출력하지 않습니다. 그러나 정의된 _DEBUG 전처리기 매크로로 컴파일하면 "Hello, world!"가 인쇄됩니다. 콘솔로.

위 내용은 WinMain 진입점을 사용하여 Windows C 프로그램에서 콘솔 출력을 표시하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.