【问题标题】:C/C++ Code Compiler in C#C# 中的 C/C++ 代码编译器
【发布时间】:2013-11-12 21:03:23
【问题描述】:

在 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# 编译 C/C++ 代码?
  • c# 和 vb 是托管代码意味着在 CLR 下运行。但是 C/C++ 代码称为非托管代码,我认为编组是您要寻找的。​​span>
  • @Sudhakar 不,这真的不是他想要的。托管 C++ 可以编译为在 CLR 上运行。

标签: c# c++ .net c compiler-construction


【解决方案1】:

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

【讨论】:

  • 很好,我不知道。所以删除了我的答案,因为它是完全错误的。这是该课程的英文链接顺便说一句:msdn.microsoft.com/en-us/library/…
  • @DavidArno 我的错。忘记了文章的俄语。更新了我的答案。
  • @Redwan - 我的 Visual Studio 2010 副本没有 Microsoft.VisualC - 我该怎么办?
  • @Joe 如本文msdn.microsoft.com/en-us/library/… 中所述,该类在 Windows SDK 中提供
  • @Redwan - 我要下载 Windows SDK - 这是个好主意吗?
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多