C/C++ C# 代码编译器
C/C++ Code Compiler in C#
在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的答案本身就足够了。
相关文章:
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为C++03编译器编写部分unique_ptr,该编译器与较新的编译器在公共代码库上运行
- 与其他编译器相比,相同的代码在工作室Microsoft提供不同的输出
- Visual Studio 中是否有来自代码块的编译器标志的类似物?
- C++ 代码的行为因编译器而异
- 代码未在联机编译器上显示结果
- 在 Azure DevOps 构建管道中使用英特尔C++编译器为 Linux 环境构建C++代码
- 编译器资源管理器(godbolt)如何安全地运行代码?
- 使用特征C++需要哪个代码块编译器?
- GCC 编译器是否应该对涉及 [[fallthrough]] 属性的格式错误的C++代码进行诊断?
- boost::spirit--试图编译大多数简单代码的编译器错误
- 使用其他编译器编译QT代码
- 使用 Mac 终端编译器编译 c++14 代码
- 我最近更改了编译器路径以运行 c++ 代码,但现在我无法运行任何 python 代码。我该如何解决这个问题?
- 编译器是否C++具有相同模板参数集的每个模板类实例生成代码?
- 为什么当我的代码超出函数范围时,"does not name a type"出现编译器错误?
- 如何获得代码::块的C++代码编译器?
- 提升精神代码.编译器错误
- 代码编译器-如何编译ASM代码
- C/C++ C# 代码编译器