如何使用 C# 编译 C++ 代码。需要开发 C++ IDE [关闭]
Posted
技术标签:
【中文标题】如何使用 C# 编译 C++ 代码。需要开发 C++ IDE [关闭]【英文标题】:How to compile C++ code using C#. Need to develop a C++ IDE [closed] 【发布时间】:2014-05-08 13:26:50 【问题描述】:我对开发 C++ IDE 很感兴趣,但为了方便和更好的 UI,我想使用 C# 开发 IDE。但是我遇到了一个问题,我找不到如何使用 C# 编译 C++ 代码并构建使用我的 IDE 编译的 C++ 程序的“.exe”。任何人都可以建议我是否有任何 API 或库可以构建我提供输入的任何 C++ 代码的“.exe”。
我能够编译和构建 C# 代码,但是如果有一种方法可以将 c++ 编译器功能集成到我的应用程序中,任何人都可以帮助我。 我需要的是类似于 CSharpCodeProvider 但用于编译 C++ 代码的东西。
我正在为 C# 编译做的是在下面的代码中。
class Compiler
public static bool CompileFromSource(string source, string Output, string Icon = null, string[] Resources = null)
// We declare the new compiler parameters variable
// that will contain all settings for the compilation.
CompilerParameters CParams = new CompilerParameters();
// We want an executable file on disk.
CParams.GenerateExecutable = true;
// This is where the compiled file will be saved into.
CParams.OutputAssembly = Output;
// We need these compiler options, we will use code optimization,
// compile as a x86 process and our target is a windows form.
// The unsafe keyword is used because the stub contains pointers and
// unsafe blocks of code.
string options = "/optimize+ /platform:x86 /target:winexe /unsafe";
// If the icon is not null (as we initialize it), add the corresponding option.
if (Icon != null)
options += " /win32icon:\"" + Icon + "\"";
// Set the options.
CParams.CompilerOptions = options;
// We don't care about warnings, we don't need them to show as errors.
CParams.TreatWarningsAsErrors = false;
// Add the references to the libraries we use so we can have access
// to their namespaces.
CParams.ReferencedAssemblies.Add("System.dll");
CParams.ReferencedAssemblies.Add("System.Windows.Forms.dll");
CParams.ReferencedAssemblies.Add("System.Drawing.dll");
CParams.ReferencedAssemblies.Add("System.Data.dll");
CParams.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");
// Check if the user specified any resource files.
// If yes, add then to the stub's resources.
if (Resources != null && Resources.Length > 0)
// Loop through all resource files specified in the Resources[] array.
foreach (string res in Resources)
// Add each resource file to the compiled stub.
CParams.EmbeddedResources.Add(res);
// Dictionary variable is used to tell the compiler that we want
// our file to be compiled for .NET v2
Dictionary<string, string> ProviderOptions = new Dictionary<string, string>();
ProviderOptions.Add("CompilerVersion", "v2.0");
// Now, we compile the code and get the result back in the "Results" variable
CompilerResults Results = new CSharpCodeProvider(ProviderOptions).CompileAssemblyFromSource(CParams, source);
// Check if any errors occured while compiling.
if (Results.Errors.Count > 0)
// Errors occured, notify the user.
MessageBox.Show(string.Format("The compiler has encountered 0 errors",
Results.Errors.Count), "Errors while compiling", MessageBoxButtons.OK,
MessageBoxIcon.Error);
// Now loop through all errors and show them to the user.
foreach (CompilerError Err in Results.Errors)
MessageBox.Show(string.Format("0\nLine: 1 - Column: 2\nFile: 3", Err.ErrorText,
Err.Line, Err.Column, Err.FileName), "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
else
// No error was found, return true.
return true;
谢谢。
【问题讨论】:
我猜你总是可以将 libclang 包装在一个 DLL 中 见msdn.microsoft.com/en-us/library/ms235639.aspx。但我认为这个任务比你想象的要复杂得多:)(请参阅制作文件...) Clang++ 是 Clang 编译器的编译器前端。如果您想将编译器用作服务,我建议将 libclang 包装在 DLL 中,这是您可以 P/Invoke 的实际编译器。 clang.llvm.org @SaqibVohra:那么它就不是一个普通的 IDE。任何健全的软件都将 IDE 和编译器分开,这是有很多很好的理由的。除此之外,您问我们如何从头开始编写功能齐全的 C++ 编译器,没有任何想法或具体问题? -1 来自我。 你的最后两个共同点相互冲突“But i want to integrate compiler feature in my IDE, i.e it should not use any other program to compile other than my IDE”和“I want to use some existing C++ compiler like gcc”,是哪个? 【参考方案1】:当您安装 Visual Studio 或安装 Windows SDK 时,虽然它不在 .NET 中,但它会将程序集 CppCodeProvider.dll 安装到包含 CppCodeProvider
类的 GAC 中。
但是我不知道部署起来有多容易,您可能需要在部署时将 CppCodeProvider.dll 包含在您的类中以及您发现它依赖的任何其他 dll 中。
【讨论】:
非常感谢 :) 但我仍然想知道编译后的 C++ 代码的“.exe”是否需要 .net 才能运行? 不,它不需要 .net,它可能需要或不需要安装 C++ 运行时,具体取决于您的编译选项,但它不需要 .net。 非常感谢 :) 这就是我要找的东西 我尝试了很多使用 CppCodeProvider,但无法正确使用,因为在任何地方都没有正确提供文档。你能指导我斯科特吗?我尝试了一些实现,但无法取得成功。 ***.com/questions/23553159/… 我没用过,这个问题我没有指导意见。以上是关于如何使用 C# 编译 C++ 代码。需要开发 C++ IDE [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在Visual Studio中选择C++和C#的编译器版本