编译C++;在Visual Studio中通过C#类编写代码 < >我用这个方法编译VC++文件,但是即使我提供正确的文件,它也返回false。谁能帮我。。。 这是一个叫做CL的类 class CL { private const string clexe = @"cl.exe"; private const string exe = "Test.exe", file = "test.cpp"; private string args; public CL(String[] args) { this.args = String.Join(" ", args); this.args += (args.Length > 0 ? " " : "") + "/Fe" + exe + " " + file; } public Boolean Compile(String content, ref string errors) { if (File.Exists(exe)) File.Delete(exe); if (File.Exists(file)) File.Delete(file); File.WriteAllText(file, content); Process proc = new Process(); proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.FileName = clexe; proc.StartInfo.Arguments = this.args; proc.StartInfo.CreateNoWindow = true; proc.Start(); //errors += proc.StandardError.ReadToEnd(); errors += proc.StandardOutput.ReadToEnd(); proc.WaitForExit(); bool success = File.Exists(exe); return success; } }

编译C++;在Visual Studio中通过C#类编写代码 < >我用这个方法编译VC++文件,但是即使我提供正确的文件,它也返回false。谁能帮我。。。 这是一个叫做CL的类 class CL { private const string clexe = @"cl.exe"; private const string exe = "Test.exe", file = "test.cpp"; private string args; public CL(String[] args) { this.args = String.Join(" ", args); this.args += (args.Length > 0 ? " " : "") + "/Fe" + exe + " " + file; } public Boolean Compile(String content, ref string errors) { if (File.Exists(exe)) File.Delete(exe); if (File.Exists(file)) File.Delete(file); File.WriteAllText(file, content); Process proc = new Process(); proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.FileName = clexe; proc.StartInfo.Arguments = this.args; proc.StartInfo.CreateNoWindow = true; proc.Start(); //errors += proc.StandardError.ReadToEnd(); errors += proc.StandardOutput.ReadToEnd(); proc.WaitForExit(); bool success = File.Exists(exe); return success; } },c#,c++,visual-studio,compilation,C#,C++,Visual Studio,Compilation,这是我的按钮点击事件 private void button1_Click(object sender, EventArgs e) { string content = "#include <stdio.h>\nmain(){\nprintf(\"Hello world\");\n}\n"; string errors = ""; CL k = new CL(new string[] { }); if

这是我的按钮点击事件

    private void button1_Click(object sender, EventArgs e)
    {
        string content = "#include <stdio.h>\nmain(){\nprintf(\"Hello world\");\n}\n";
        string errors = "";

        CL k = new CL(new string[] { });
        if (k.Compile(content, ref errors))
            Console.WriteLine("Success!");
        else
            MessageBox.Show("Errors are : ", errors);
    } 
private void按钮1\u单击(对象发送者,事件参数e)
{
string content=“#include\nmain(){\nprintf(\“Hello world\”);\n}\n”;
字符串错误=”;
clk=newcl(新字符串[]{});
如果(k.编译(内容,参考错误))
Console.WriteLine(“成功!”);
其他的
Show(“错误为:”,错误);
} 

在Visual Studio安装文件夹中,应该有以下路径:

VC\bin\x86_amd64\1033\1033
此路径中应该有一个
clui.dll
。将其复制到父文件夹(
VC\bin\x86\u amd64\1033
)。这应该能解决你的问题


我从以下位置获取解决方案:

在Visual Studio安装文件夹中,应该有以下路径:

VC\bin\x86_amd64\1033\1033
此路径中应该有一个
clui.dll
。将其复制到父文件夹(
VC\bin\x86\u amd64\1033
)。这应该能解决你的问题


我的解决方案来自:

也许它不相关,但我认为您的命令行中缺少了一个空格

this.args += (args.Length > 0 ? " " : "") + "/Fe" + exe + " " + file;

就在
“/Fe”

之后,可能不相关,但我认为您的命令行中缺少了一个空格

this.args += (args.Length > 0 ? " " : "") + "/Fe" + exe + " " + file;

<> >在代码> > /FE] < /Calp>

你得到什么错误消息?这看起来非常像C代码。为什么当你的问题文本被标记为C++时,问题被标记为C?在消息框中,它显示为“致命错误C1510:不能加载语言资源Culi.dll”代码是C++,但他想用它编译C++文件。这正是问题所在。如果不是环境问题,那么我就没有什么好主意。您可以尝试将cl.exe的完整路径放在中,而不只是放在cl.exe中,以查看这是否有任何区别-可能是它正在使用arg[0]尝试定位clui.dll,但是如果它是通过路径执行的,那么它仍然应该被正确设置。你得到什么错误消息?这看起来非常像C代码。为什么当你的问题文本被标记为C++时,问题被标记为C??在消息框中,它显示为“致命错误C1510:不能加载语言资源CURI.DLL”。代码是C,但是他想用它编译C++文件。这正是问题所在。如果不是环境问题,那么我就没有什么好主意。您可以尝试将cl.exe的完整路径放在中,而不只是放在cl.exe中,以查看这是否有任何区别-可能是它正在使用arg[0]尝试并定位clui.dll,但如果通过该路径执行,则应该正确设置该路径。您的意思是将clui.dll添加到调试文件夹中。我做到了。但还是同样的错误。有什么需要设置的吗?我希望它会在特定于语言环境的目录中查找clui.dll,该目录与cl.exe或路径中的某些内容相关。我会打开一个Visual Studio命令提示符(或在常规命令提示符下运行vsvars32.bat),然后尝试从那里运行生成的.exe,最好远离您复制的任何cl.exe或clui.exe,以查看这是否只是环境问题。您的意思是将clui.dll添加到调试文件夹中。我做到了。但还是同样的错误。有什么需要设置的吗?我希望它会在特定于语言环境的目录中查找clui.dll,该目录与cl.exe或路径中的某些内容相关。我会打开一个Visual Studio命令提示符(或在常规命令提示符下运行vsvars32.bat),然后尝试从那里运行生成的.exe,最好远离您复制的任何cl.exe或clui.exe,看看这是否只是环境问题。