用C#编写的C/C++代码编译器

7
在C#中,我可以使用下面的代码编译VB和C#代码,但是我没有办法编译C/C++代码。有没有什么方法可以做到这一点?
C#编译器:
        public void Compile(string ToCompile)
        {
            string Result = null;
            string errors = null;
            Microsoft.CSharp.CSharpCodeProvider codeProvider = new Microsoft.CSharp.CSharpCodeProvider();
            System.CodeDom.Compiler.ICodeCompiler icc = codeProvider.CreateCompiler();
            string Output = @"mypath";
            System.CodeDom.Compiler.CompilerParameters parameters = new System.CodeDom.Compiler.CompilerParameters();
            parameters.GenerateExecutable = true;
            parameters.OutputAssembly = Output;
            System.CodeDom.Compiler.CompilerResults results = icc.CompileAssemblyFromSource(parameters, ToCompile);
            if (ReturnErrors == true)
            {
                if (results.Errors.Count > 0)
                {
                    foreach (System.CodeDom.Compiler.CompilerError CompErr in results.Errors)
                    {
                        errors +=
                                    "Line number " + CompErr.Line +
                                    ", Error Number: " + CompErr.ErrorNumber +
                                    ", '" + CompErr.ErrorText + ";" +
                                    Environment.NewLine + Environment.NewLine;
                    }
                    Result += "Errors have been found in your code: " + Environment.NewLine + errors;
                }
                else
                {
                    Result += "Success!";
                    System.Diagnostics.Process.Start(Output);
                }
            }

要创建一个VB编译器,我只需将Microsoft.CSharp.CSharpCodeProvider codeProvider = new Microsoft.CSharp.CSharpCodeProvider();替换为Microsoft.VisualBasic.VBCodeProvider codeProvider = new Microsoft.VisualBasic.VBCodeProvider();


3
你是在问是否有一种方法可以从C#编译C/C++代码吗? - gooid
2
C#和VB是托管代码,意味着它们在CLR下运行。但C/C++代码被称为非托管代码,我认为您正在寻找的是封送处理。 - Sudhakar Tillapudi
1
@Sudhakar 不,那真的不是他想要的。托管 C++ 可以编译为在 CLR 上运行。 - David Arno
2个回答

8

很好,我不知道那个。所以我将我的答案删除了,因为它是完全错误的。顺便提一下,这是该类的英文链接:http://msdn.microsoft.com/en-us/library/microsoft.visualc.cppcodeprovider(v=vs.85).aspx - David Arno
@DavidArno 我的错,忘记了文章是俄语。我已更新我的回答。 - Redwan
@Redwan - 我的Visual Studio 2010副本没有Microsoft.VisualC - 我该怎么办? - Joe
@Joe,正如在这篇文章中提到的那样http://msdn.microsoft.com/en-us/library/system.codedom.compiler.codedomprovider(v=vs.90).aspx ,这个类已经随着Windows SDK一起发布了。 - Redwan
@Redwan - 我打算下载Windows SDK - 这是个好主意吗? - Joe
@Joe 为什么这可能是个坏主意?它会添加头文件、库和工具来构建可以在 Windows 上运行的应用程序。你可以简单地将所需的 dll 与你的应用程序一起发布。 - Redwan

2
我假设你已经有一段源代码,比如包含一个已知原型的函数,你想将其编译并在当前运行的应用程序中运行。
为了在本机(非托管)C++中实现这一点,您需要执行以下操作:
- 动态存储您的代码到一个样板dll源项目中(即用于函数代码的空隙中写入所有内容) - 生成一个C++编译器(最终用户必须预先安装)以输出一个dll - 建立一个C++/Cli包装器,包装上面构建的c++ dll,并编译它(参见Redwan的答案) - 动态加载您的包装器Dll,并调用该函数。
如果您只能使用托管的C++/CLI,则Redwan的答案应该足够了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接