在 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