使用CodeDom以C#windpws形式编程编译C代码?

使用CodeDom以C#windpws形式编程编译C代码?,c#,c,winforms,C#,C,Winforms,我正在制作一个C编译器,我必须知道我是否可以使用CodeDom在C中编译C代码,目前我正在编写以下代码以C#windows形式编译C代码 有没有简单的方法来编译C语言的代码 using System.CodeDom.Compiler; using System.Diagnostics; using Microsoft.CSharp; private void button1_Click(object sender, System.EventArgs e) { CSharpCodeProvi

我正在制作一个C编译器,我必须知道我是否可以使用CodeDom在C中编译C代码,目前我正在编写以下代码以C#windows形式编译C代码

有没有简单的方法来编译C语言的代码

using System.CodeDom.Compiler;
using System.Diagnostics;
using Microsoft.CSharp;
private void button1_Click(object sender, System.EventArgs e)
{
   CSharpCodeProvider codeProvider = new CSharpCodeProvider();
   ICodeCompiler icc = codeProvider.CreateCompiler();
   string Output = "Out.exe";
   Button ButtonObject = (Button)sender;

   textBox2.Text = "";
   System.CodeDom.Compiler.CompilerParameters parameters = new 
   CompilerParameters();
   //Make sure we generate an EXE, not a DLL
   parameters.GenerateExecutable = true;
   parameters.OutputAssembly = Output;
   CompilerResults results = icc.CompileAssemblyFromSource(parameters, textBox1.Text);

   if (results.Errors.Count > 0)
   {
       textBox2.ForeColor = Color.Red;
       foreach (CompilerError CompErr in results.Errors)
       {
           textBox2.Text = textBox2.Text +
                       "Line number " + CompErr.Line +
                       ", Error Number: " + CompErr.ErrorNumber +
                       ", '" + CompErr.ErrorText + ";" +
                       Environment.NewLine + Environment.NewLine;
       }
   }
   else
   {
       //Successful Compile
       textBox2.ForeColor = Color.Blue;
       textBox2.Text = "Success!";
       //If we clicked run then launch our EXE
       if (ButtonObject.Text == "Run") Process.Start(Output);
   }
}

你不是在做编译器。您正在创建编译器的接口。不,您不能为此使用
CodeDom
。为什么不直接使用C编译器呢?有很多吨你可以用来做这个。Capture
STDOUT
-对于编译器输出的格式有一些通用的指导原则,解析它们应该是一项相当简单的任务


您还可以尝试嵌入一个C解释器。这可能很有趣。更有趣的是:编写您自己的C解释器(比编译器更容易实现)。

您不需要编写编译器。您正在创建编译器的接口。不,您不能为此使用
CodeDom
。为什么不直接使用C编译器呢?有很多吨你可以用来做这个。Capture
STDOUT
-对于编译器输出的格式有一些通用的指导原则,解析它们应该是一项相当简单的任务


您还可以尝试嵌入一个C解释器。这可能很有趣。更有趣的是:编写自己的C解释器(比编译器更容易实现)。

我认为您正在关注-

在为您的工作使用任意代码之前,请仔细检查它是否适合您的要求。您正在使用的是.net framework内部编译帮助程序类。检查那篇文章的以下几行

NET Framework公开了允许您以编程方式 访问C语言编译器。如果您愿意,这可能很有用 编写自己的代码编译实用程序

和要求

  • Visual Studio
  • Visual C语言编译器
那么如何使用这些.net库类编译
c程序

您可以使用c编译器exe并使用该编译器进行编译 控制台应用程序中的文件,或使用.net中的
进程

您可以从命令行编译c,只需从c中使用相同的代码即可#
redirectstandardoutput
将允许您获得将显示的输出

Process proc = new Process();
proc.StartInfo.FileName = "compiler name";
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
string output = proc.StandardOutput.ReadToEnd();

我想你在跟踪-

在为您的工作使用任意代码之前,请仔细检查它是否适合您的要求。您正在使用的是.net framework内部编译帮助程序类。检查那篇文章的以下几行

NET Framework公开了允许您以编程方式 访问C语言编译器。如果您愿意,这可能很有用 编写自己的代码编译实用程序

和要求

  • Visual Studio
  • Visual C语言编译器
那么如何使用这些.net库类编译
c程序

您可以使用c编译器exe并使用该编译器进行编译 控制台应用程序中的文件,或使用.net中的
进程

您可以从命令行编译c,只需从c中使用相同的代码即可#
redirectstandardoutput
将允许您获得将显示的输出

Process proc = new Process();
proc.StartInfo.FileName = "compiler name";
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
string output = proc.StandardOutput.ReadToEnd();

是否有其他默认库可用于此目的?您首先为什么要这样做?是否有其他默认库可用于此目的?您首先为什么要这样做?