首頁 > 後端開發 > C++ > 如何在本機 C Windows 程式中顯示控制台輸出?

如何在本機 C Windows 程式中顯示控制台輸出?

DDD
發布: 2024-11-20 16:04:15
原創
603 人瀏覽過

How to Display Console Output in a Native C   Windows Program?

在本機C Windows 程式中顯示控制台輸出

在使用WinMain 入口點的C Windows 程式中,由std 等函數產生的控制台輸出: :cout 預設情況下可能不可見。這是因為圖形使用者介面 (GUI) 應用程式通常沒有與之關聯的控制台視窗。

解決方案:

1.將控制台附加到應用程式:

  • 利用AllocConsole()函數為您的程式建立一個新的控制台視窗。
  • 重定向標準輸入 (STDIN)、輸出 ( STDOUT)和錯誤(STDERR)使用 _open_osfhandle() 和_fdopen()。

2。將控制台輸出重新導向至檔案:

  • 如果您無法修改程式碼庫,您仍然可以透過將控制台輸出重新導向至文字檔案來查看控制台輸出。
  • 使用 FreeConsole( ) 函數來釋放控制台句柄。
  • 呼叫OutputDebugString() 將輸出重新導向到文件,可以使用偵錯工具(如DebugView。

使用控制台重定向的範例程式碼:

以下程式碼片段示範如何將控制台附加到Windows 程式並將串流重新導向到它:

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);
}
登入後複製

包含標頭:

#include "guicon.h"
登入後複製

用法:

#ifdef _DEBUG
    RedirectIOToConsole();
#endif
登入後複製

以上是如何在本機 C Windows 程式中顯示控制台輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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