如何在c#中使用CppCodeProvider编译c++代码

本文关键字:CppCodeProvider 编译 c++ 代码 | 更新日期: 2023-09-27 18:02:22

我试图使用CodeDomProvider在c#中编译c++代码,但程序正在给出错误。我不知道如何使用CppClassProvider我找不到任何参考资料在互联网上关于CppCodeProvider,所有的网站都有CSharpCodeProvider或codedomprovider的例子。如果有人能帮我解决这个问题,我将不胜感激。

如果我走错了方向,我想解释一下,我有兴趣在我的c#应用程序中编译c++代码,并像CSharpCodeProvider为"c#"代码构建"。exe"。

我试图实现的代码如下所示。代码写得很糟糕,请忽略GPPs(良好的编程实践),因为我只是在做这个尝试。

namespace CPPCodeProviderTest
{
    class Program
    {
        static void Main(string[] args)
        {
            CompilerParameters cparams = new CompilerParameters();
            cparams.GenerateExecutable = true;
            String output = @"F:'test.exe";
            cparams.OutputAssembly = output;
            cparams.CompilerOptions = "/optimize";
          //CppCodeProvider cpp = new CppCodeProvider();
            CodeDomProvider pro = CodeDomProvider.CreateProvider("cpp");
            cparams.ReferencedAssemblies.Add("System.dll");
            String f = Properties.Resources.code;
            CompilerResults cr = pro.CompileAssemblyFromSource(cparams, f);
            if (cr.Errors.Count > 0)
            {
                foreach (CompilerError e in cr.Errors)
                {
                    Console.WriteLine(e.ErrorNumber + " " + e.ErrorText);
                }
            }
            else
                Console.WriteLine("successfull");
        }
    }
}

Resources.code

#include <iostream>
using namespace std;
int main()
{
    cout << "Hello World!";
    return 0;
}
错误:

 System.NotImplementedException was unhandled
  HResult=-2147467263
  Message=The method or operation is not implemented.
  Source=CppCodeProvider
  StackTrace:
       at Microsoft.VisualC.CppCodeProvider.CreateCompiler()
       at System.CodeDom.Compiler.CodeDomProvider.CreateCompilerHelper()
       at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource(CompilerParameters options, String[] sources)
       at CPPCodeProviderTest.Program.Main(String[] args) in c:'Users'SSV'Documents'Visual Studio 2013'Projects'CPPCodeProviderTest'CPPCodeProviderTest'Program.cs:line 25
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

谢谢:)

如何在c#中使用CppCodeProvider编译c++代码

方法Microsoft.VisualC.CppCodeProvider.CreateCompiler抛出异常System.NotImplementedException

当一个对象实现了一个接口,但并不是所有的方法都被实现时抛出。这种情况通常发生在方法可能无法实现的情况下。

文档在这里:

  • http://msdn.microsoft.com/en-us/library/system.codedom.compiler.codedomprovider.createcompiler (v = vs.110) . aspx

它说:

这个方法在。net Framework 2.0中已经过时了。推荐的另一种方法是直接调用ICodeCompiler方法可在代码提供程序中获得。

在。net Framework 2.0中,你应该实现CodeDomProvider类中的ICodeCompiler成员,并抛出当这个方法被调用时,出现NotSupportedException。

经过长时间的挖掘,我发现微软目前不支持CPP的编译。你可以使用任何支持命令行的c++编译器(gcc, Mingw等)来编译你的c++代码。

奇怪的是,当你检查下面的代码时,它返回true,但是这个方法并没有被Microsoft实现。

CodeDomProvider.IsDefinedLanguage("Cpp")

如果有人发现我错了,或者找到更好的方法,请让我知道。谢谢:)