2012-02-04 17 views
2

C#コンソール(printf( "")ステートメント)の出力をC#コンソールにリダイレクトしたい。続き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++コンソールは何も出力しません(出力がリダイレクトされたことを意味します)。

この問題を解決するにはどうすればよいですか?

おかげで、

+0

[OutputDataReceived](http://msdn.microsoft.com/en-us/library/system.diagnostics.process.outputdatareceived.aspx)には、「非同期を処理しているアプリケーション出力はWaitForExit()メソッドを呼び出して、出力バッファがフラッシュされていることを確認する必要があります。 –

+0

レイモンドさんに感謝します。しかし、それはWaitForExit()でも同じです。実際、私のC++はOpenCVを使用するアプリケーションです。 OpenCV関連の関数を使用すると、printf文だけがC#consoleにリダイレクトされません。使用している場合のように、 CvCapture * capture = cvCaptureFromCAM(1); Cのコンソールにリダイレクトされないprintfステートメントの後。 – Gimz

答えて

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

関連する問題