将 printf C++控制台输出重定向到 C#

本文关键字:重定向 输出 控制台 printf C++ | 更新日期: 2023-09-27 18:37:03

这是我在 C# GUI 程序中单击按钮时调用的方法。它启动了一个非常简单的C++控制台程序,该程序除了在永无止境的循环中每秒打印出一行之外什么都不做。

private static Process process;
private void LaunchCommandLineApp()
{
    process = new Process();
    process.StartInfo.FileName = "SimpleTest.exe";
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardOutput = true;
    process.EnableRaisingEvents = true;
    process.StartInfo.CreateNoWindow = false;
    process.OutputDataReceived += process_OutputDataReceived;
    process.Start();
    process.BeginOutputReadLine();
}

这是处理收到的任何输出数据的方法:

private void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    if (e.Data != null)
        Console.WriteLine(e.Data.ToString());
}

我在 C# 调试输出中看不到任何输出...但是如果我将 printf 更改为 std::cout,它将显示重定向的消息。

我在想是否有任何方法可以使用 printf 显示这些语句?

仅供参考:我的 c++ 代码 [编辑工作版本]

#include <stdio.h>
#include <Windows.h>
#include <iostream>
int main()
{
int i = 0;
for(;;)
{
    Sleep(1000);
    i++;
    // this version of printf with fflush will work
    printf("The current value of i is %d'n", i);
    fflush(stdout);
    // this version of cout will also work
    //std::cout << "the current value of i is " << i << std::endl;
}
printf("Program exit'n");
}

将 printf C++控制台输出重定向到 C#

感谢大家的所有投入!

我想我会为我的C++控制台程序将所有 printf 更改为 std::cout 和 std::endl。