В настоящее время я пишу небольшой редактор для интерпретируемого языка программирования.Когда программа запускается, редактор (написанный на C #) создает новый процесс, который запускает интерпретатор (написанный на C ++).Консоль отображается так же, как и в любой другой программе на С ++, и показывает ее вывод.
Когда интерпретатор (т. Е. Программа на С ++) сталкивается с ошибкой в коде, сообщение печатается со стандартной ошибкой,с указанием типа ошибки и номера строки, на которой она произошла.Я хотел бы прочитать стандартную ошибку интерпретатора из редактора, чтобы редактор мог выделить строку ошибки, как указано в сообщении об ошибке.
К сожалению, приведенный ниже код (предназначен для чтения только стандартная ошибка), как-то приводит к тому, что стандартный вывод программы также не выводится на консоль!
private void indicateErrorTest(object sendingProcess, DataReceivedEventArgs outLine)
{
MessageBox.Show(outLine.Data);
}
private void run()
{
program = new Process();
program.StartInfo.FileName = INTERPRETER_PATH;
program.StartInfo.Arguments = "\"" + relativeFilename + "\"";
program.StartInfo.RedirectStandardError = true;
program.StartInfo.UseShellExecute = false;
program.ErrorDataReceived += new DataReceivedEventHandler(indicateErrorTest);
program.Start();
program.BeginErrorReadLine();
program.EnableRaisingEvents = true;
program.Exited += new System.EventHandler(onProgramConsoleClose);
}
Я даже не уверен, что приводит к тому, что вывод не записывается.В противном случае программа ведет себя полностью, как ожидалось.Есть ли способ заставить стандартный вывод по-прежнему записывать в консоль, при этом читая стандартную ошибку?Или есть лучший способ получить индикации ошибок от процесса интерпретатора?Благодаря.