如何用C#调用gcc编译程序并取得编译信息?

ogsproject 2010-04-09 04:05:04
最近帮校ACM队用ASP.NET写一个OJ,期间遇到C#调用gcc编译无法取得编译信息的问题。
而使用同样的方法,却能取得fpc的编译信息。
我的两端代码如下:
调用gcc的

public string Compile()
{
string strOutput;
Process proCompiler = new Process();
proCompiler.StartInfo.FileName = _strRootPath + "\\bin\\gcc\\bin\\g++.exe";
proCompiler.StartInfo.Arguments = "-o " + _strName + " " + _strName +".cpp";
proCompiler.StartInfo.WorkingDirectory = _strRootPath + "\\bin\\gcc\\bin\\";
proCompiler.StartInfo.UseShellExecute = false;
proCompiler.StartInfo.RedirectStandardInput = true;
proCompiler.StartInfo.RedirectStandardOutput = true;
proCompiler.StartInfo.RedirectStandardError = true;
proCompiler.StartInfo.CreateNoWindow = true;
proCompiler.Start();
strOutput = proCompiler.StandardOutput.ReadToEnd();
proCompiler.Close();
return strOutput;
}

调用fpc的:

public string Compile()
{
string strOutput;
Process proCompiler = new Process();
proCompiler.StartInfo.FileName = _strRootPath + "\\" + "bin\\fpc\\fpc.exe";
proCompiler.StartInfo.Arguments = _strName + ".pas" + " -vi";
proCompiler.StartInfo.WorkingDirectory = _strRootPath + "\\" + "bin\\fpc\\";
proCompiler.StartInfo.UseShellExecute = false;
proCompiler.StartInfo.RedirectStandardInput = true;
proCompiler.StartInfo.RedirectStandardOutput = true;
proCompiler.StartInfo.RedirectStandardError = true;
proCompiler.StartInfo.CreateNoWindow = true;
proCompiler.Start();
strOutput = proCompiler.StandardOutput.ReadToEnd();
proCompiler.Close();
return strOutput;
}

多次尝试均只能取得fpc的编译信息,而调用gcc时无论代码正确与否都不能取得编译信息,请问如何解决?谢谢。
...全文
650 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
topmint 2011-10-15
  • 打赏
  • 举报
回复
strOutput += proCompiler.StandardError.ReadToEnd();
MDA06004 2011-09-07
  • 打赏
  • 举报
回复
你好,我也是碰到了这个问题,请问你是如何解决的?用delphi调用,怎么传递给c#的?能否帮忙一下?
ogsproject 2010-04-12
  • 打赏
  • 举报
回复
恩,利用Delphi调用再输出给C#解决了。谢谢大家
ogsproject 2010-04-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lost_painting 的回复:]

曾今看过某帖子提到过Process.StartInfo.RedirectStandardOutput对C/C++ printf的输出不起作用
(本人未验证过).

如果确实是这个问题,楼主考虑曲线救国吧.

给lz一个解决方案.

调用cmd.exe 然后 cmd.exe的参数设置为 "/k " + _strRootPath +
"\\bin\\gcc\\bin\\g++.ex……
[/Quote]

我也看到过这种说法,但是自己写了个用printf输出的程序试验了下,却可以取得输出。
又做了下面这个实验,依然没输出:

Process proP = new Process();
proP.StartInfo.FileName = "\\bin\\gcc\\bin\\g++.exe";
proP.StartInfo.UseShellExecute = false;
proP.StartInfo.RedirectStandardError = true;
proP.StartInfo.RedirectStandardInput = true;
proP.StartInfo.RedirectStandardOutput = true;
proP.Start();
textBox1.Text = proP.StandardOutput.ReadToEnd();
proP.Close();

现在正在尝试用pascal写一个调用g++的程序来实现编译。
victorytangtang 2010-04-11
  • 打赏
  • 举报
回复
关注,帮你顶!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
鸭梨山大帝 2010-04-11
  • 打赏
  • 举报
回复
曾今看过某帖子提到过Process.StartInfo.RedirectStandardOutput对C/C++ printf的输出不起作用
(本人未验证过).

如果确实是这个问题,楼主考虑曲线救国吧.

给lz一个解决方案.

调用cmd.exe 然后 cmd.exe的参数设置为 "/k " + _strRootPath +
"\\bin\\gcc\\bin\\g++.exe" + " -o " + _strName + " " + _strName +".cpp >d:\1.txt"
然后去读取d:\1.txt的内容把。

给一个简单例子:

Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = @"/c help.exe >d:\1.txt";
p.Start();


Justin-Liu 2010-04-11
  • 打赏
  • 举报
回复
看完结贴率直接关掉~
ogsproject 2010-04-11
  • 打赏
  • 举报
回复
囧,怎么一直没人帮我看看问题在哪儿啊?

110,962

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧