Как скомпилировать код C ++ с использованием CppCodeProvider в C #

Я пытался скомпилировать код C ++ в C # с использованием CodeDomProvider, но программа выдает ошибки. Я не знаю точно, как использовать CppClassProvider. Не могу найти в Интернете никаких справочных материалов, касающихся CppCodeProvider, все сайты имеют примеры CSharpCodeProvider или CodeDomProvder. Я буду благодарен, если кто-нибудь может помочь мне с ситуацией.

Если я иду в неправильном направлении, я хочу объяснить, что меня интересует компиляция кода C ++ в моем приложении C # и сборка «.exe», как это делает CSharpCodeProvider для кода «C #».

Кодекс, который я пытался реализовать, приведен ниже. Код написан плохо, пожалуйста, игнорируйте GPP (Good Programming Practices), так как я только что делал это, чтобы попробовать в настоящее время.

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:

Спасибо 🙂

0

Решение

Этот метод Microsoft.VisualC.CppCodeProvider.CreateCompiler бросает исключение System.NotImplementedException,

Это выдается, когда объект реализует интерфейс, но не все методы реализованы. Обычно это происходит, когда задокументировано, что метод может быть не реализован.

Документация здесь:

Это говорит:

Этот метод устарел в .NET Framework 2.0. Рекомендуемый
альтернативой является вызов методов ICodeCompiler, которые напрямую
доступно в коде провайдера.

Примечания для наследников В .NET Framework 2.0 вы должны реализовать
члены ICodeCompiler в классе CodeDomProvider и бросить
NotSupportedException, когда этот метод вызывается.

2

Другие решения

После долгого копания я обнаружил, что Компиляция CPP не поддерживается Microsoft в настоящее время. Вы можете использовать любой компилятор C ++, который поддерживает командную строку (gcc, Mingw и т. Д.), Для компиляции кода на C ++.

Странная вещь, когда вы проверяете следующий код, он возвращает true, но метод не реализован Microsoft.

CodeDomProvider.IsDefinedLanguage("Cpp")

Если кто-то обнаружит, что я ошибаюсь, или найдет лучший способ сделать это, пожалуйста, дайте мне знать.
Спасибо 🙂

1