Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memaparkan Output Konsol dalam Program Windows C dengan Titik Masuk WinMain?

Bagaimana untuk Memaparkan Output Konsol dalam Program Windows C dengan Titik Masuk WinMain?

Patricia Arquette
Patricia Arquetteasal
2024-11-19 10:03:02470semak imbas

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

Mengoutputkan Teks Konsol dalam Windows C

Aturcara C asli yang dijalankan pada Windows boleh menggunakan antara muka baris arahan untuk memaparkan output konsol. Walau bagaimanapun, jika titik masuk program ditakrifkan sebagai WinMain, cara melihat data yang dicetak menggunakan fungsi output standard seperti std::cout tidak dapat dilihat dengan segera.

Penyelesaian:

Terdapat beberapa pendekatan untuk mencapai output konsol dalam senario ini:

1. Menggunakan Fungsi Ubah Hala:

Laksanakan fungsi ubah hala tersuai yang memintas strim I/O standard dan menghalakannya ke konsol. Berikut ialah contoh menggunakan API Win32:

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();
}

Kemudian, masukkan fungsi ini dalam program anda dan panggilnya sebelum menggunakan fungsi output standard.

2. Mengubah hala Output Konsol ke Fail:

Pilihan lain ialah mengubah hala output konsol ke fail, yang kemudiannya boleh dilihat menggunakan editor teks. Ini boleh dilakukan dengan mengubah suai baris arahan program:

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

Dalam contoh ini, output standard dan ralat standard dialihkan ke fail "output.txt".

3 . Menggunakan Kompilasi Bersyarat:

Jika program anda menyasarkan pembangunan atau penyahpepijatan secara khusus, anda boleh menggunakan kompilasi bersyarat untuk memasukkan output konsol hanya apabila perlu. Sebagai contoh, anda boleh membungkus pernyataan output konsol anda dalam blok #ifdef _DEBUG.

Contoh Pelaksanaan:

test.cpp

#include <iostream>

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

Secara lalai, program ini tidak akan mengeluarkan apa-apa. Walau bagaimanapun, apabila disusun dengan makro prapemproses _DEBUG yang ditakrifkan, ia akan mencetak "Hello, dunia!" ke konsol.

Atas ialah kandungan terperinci Bagaimana untuk Memaparkan Output Konsol dalam Program Windows C dengan Titik Masuk WinMain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn