C/C++ C# 代码编译器

C/C++ Code Compiler in C#

本文关键字:代码 编译器 C++      更新时间:2023-10-16

在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();

你可以编译 c++/cli 代码,而不是如上所述的本机 c++。您可以使用 CppCodeProvider (http://msdn.microsoft.com/en-us/library/microsoft.visualc.cppcodeprovider(v=vs.85).aspx) 类来存档 c++/cli 编译,就像在您的示例中一样。

我假设你有一大块源代码,比如说包含一个带有已知原型的函数,你想要编译,并在你当前正在运行的应用程序中运行。

若要在本机(非托管)C++中执行此操作,需要执行以下操作:

  • 将您的代码动态存储到样板 dll 源项目中(即编写的所有内容都带有函数代码的间隙,您将插入)
  • 生成一个C++编译器(最终用户必须预安装)以输出 DLL
  • 构建一个 C++/Cli 包装器来包装你上面构建的 c++ dll,并编译它(参见 Redwan 的答案)
  • 动态加载包装器 Dll,并调用该函数。

如果你可以只使用托管的c ++/CLI,那么Redwan的答案本身就足够了。