ホームページ  >  記事  >  バックエンド開発  >  WinMain エントリ ポイントを使用して Windows C プログラムでコンソール出力を表示する方法

WinMain エントリ ポイントを使用して Windows C プログラムでコンソール出力を表示する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-19 10:03:02467ブラウズ

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.コンソール出力をファイルにリダイレクトする:

もう 1 つのオプションは、コンソール出力をファイルにリダイレクトし、テキスト エディターを使用して表示できるようにすることです。これは、プログラムのコマンド ラインを変更することで実行できます。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。