在 Visual Studio 中通过 C# 类编译 C++ 代码

Posted

技术标签:

【中文标题】在 Visual Studio 中通过 C# 类编译 C++ 代码【英文标题】:Compile C++ code via C# class in Visual Studio 【发布时间】:2010-06-15 08:13:58 【问题描述】:

我使用这种方法在 VS 中编译 C++ 文件。但即使我提供了正确的文件,它也会返回 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;
    

这是我的按钮点击事件

    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);
     

【问题讨论】:

您收到了哪些错误消息? 这看起来非常像 C# 代码 - 当问题标记为 C# 时,为什么您的问题文本会询问 C++? 在消息框中显示为“致命错误 c1510:无法加载语言资源 clui.dll” 代码是 C# 但他想用它编译 C++ 文件。这正是问题所要问的。 如果不是环境那么我没有什么好主意。您可以尝试将 cl.exe 的完整路径放入其中,而不仅仅是 cl.exe 以查看这是否有任何区别 - 可能是它使用 arg[0] 来尝试定位 clui.dll,尽管仍然应该设置如果通过路径执行,则正确。 【参考方案1】:

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

VC\bin\x86_amd64\1033\1033

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

我从http://connect.microsoft.com/VisualStudio/feedback/details/108528/command-line-issue-when-building-for-64bit-in-32bit-with-cl-exe那里得到了解决方案:

【讨论】:

您的意思是将 clui.dll 添加到调试文件夹。我做到了。但仍然是同样的错误。有什么需要设置的吗 我希望它会在相对于 cl.exe 的特定于语言环境的目录中或在您的路径中的某个目录中查找 clui.dll。我会打开一个 Visual Studio 命令提示符(或在常规命令提示符下运行 vsvars32.bat),然后尝试从那里运行你构建的 .exe,最好远离你复制的任何 cl.exe 或 clui.exe,以看看是不是环境问题。【参考方案2】:

也许它不相关,但我认为你在命令行中遗漏了一个空格......

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

就在"/Fe"之后

【讨论】:

以上是关于在 Visual Studio 中通过 C# 类编译 C++ 代码的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 中通过 C# (Selenium) 自动登录 Gmail

在 Visual Studio 中通过 C# 将参数传递给 Mac 上的终端

在 Visual Studio 中通过 printf() 打印 std::string

如何在 Visual Studio 2019 中通过单击按钮来重复数组上的元素

Android studio关于界面跳转问题

如何使用 C# 在 Visual Studio 中放置图像? [关闭]