2012-02-04 104 views
2

我想获取重定向到C#控制台的C++控制台输出(printf(“”)语句)。将C++控制台输出重定向到C#控制台不会打印任何东西

以下是我所得到

 Process e = new Process(); 
     e.StartInfo.UseShellExecute = false; 
     e.StartInfo.RedirectStandardOutput = true; 
     e.StartInfo.FileName = "C:\\Users\\Projects\\ot\\x64\\Debug\\ot.exe"; 
     e.OutputDataReceived += (s, e) => Console.WriteLine(e.Data); 
     e.Start(); 
     e.BeginOutputReadLine(); 

但我没有得到任何输出。 C++控制台不会打印任何东西(这意味着输出已被重定向),这些代码行都不是C#。

我该如何解决这个问题?

感谢,

+0

[OutputDataReceived](http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.outputdatareceived.aspx)上有一个很大的黄色注释,​​它表示“正在处理异步输出应调用WaitForExit()方法以确保输出缓冲区已被刷新。“ – 2012-02-04 14:29:11

+0

谢谢你的回复雷蒙德。但WaitForExit()也是如此。其实我的C++是一个使用OpenCV的应用程序。 当我使用OpenCV相关函数时,只有printf语句不会重定向到C#控制台。就像我使用, CvCapture * capture = cvCaptureFromCAM(1); 后printf语句不会重定向到C#控制台。 – Gimz 2012-02-06 04:02:23

回答

0

尝试使用:

Process e = new Process(); 
    e.StartInfo.UseShellExecute = false; 
    e.StartInfo.RedirectStandardOutput = true; 
    e.StartInfo.RedirectStandardError = true; 
    e.StartInfo.FileName = "C:\\Users\\Projects\\ot\\x64\\Debug\\ot.exe"; 
    e.OutputDataReceived += (s, e) => Console.WriteLine(e.Data); 
    e.ErrorDataReceived += (s, e) => Console.WriteLine(e.Data); 
    e.Start(); 
    e.BeginOutputReadLine(); 
    e.BeginErrorReadLine(); 
    e.WaitForExit(); 
    e.CancelErrorRead(); 
    e.CancelOutputRead(); 

我已经把可以用来包裹process class和帮助与其他进程交互的基类。

+0

欢迎来到堆栈溢出。请注意答案应该是独立的;尽管链接可能用于提供资源和附加信息,但实际的解决方案应该包含在答案中。请访问[帮助中心](http://stackoverflow.com/help/how-to-answer)以获取有关回答本网站上问题的指导。 – McMath 2016-02-27 10:33:36