首頁 > 後端開發 > C++ > 如何使用 WinMain 入口點在 Windows C 程式中顯示控制台輸出?

如何使用 WinMain 入口點在 Windows C 程式中顯示控制台輸出?

Patricia Arquette
發布: 2024-11-19 10:03:02
原創
535 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板