使用C#应用程序中的命令行程序

时间:2011-01-26 06:34:35

标签: c# c++ command-line-interface

我编写了一个C ++程序(从命令行执行),工作正常。现在我需要将它用于我的C#应用​​程序。也就是说,我希望我的C ++程序的输出可以在我的C#应用​​程序中使用。

有可能吗?如果是这样,怎么样?

任何链接或帮助都将不胜感激。

4 个答案:

答案 0 :(得分:9)

您可以使用System.Diagnostics.Process启动C ++程序并将其输出重定向到流,以便在C#应用程序中使用。 this question中的信息详细说明了具体内容:

string command = "arg1 arg2 arg3"; // command line args
string exec = "filename.exe";      // executable name
string retMessage = String.Empty;
ProcessStartInfo startInfo = new ProcessStartInfo();
Process p = new Process();

startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;

startInfo.UseShellExecute = false;
startInfo.Arguments = command;
startInfo.FileName = exec;

p.StartInfo = startInfo;
p.Start();

using (StreamReader output = p.StandardOutput)
{
    retMessage = output.ReadToEnd();
}

p.WaitForExit();

return retMessage;

答案 1 :(得分:1)

制作C ++代码DLL,并使用pinvoke从C#代码调用C ++函数。

阅读这篇文章:Calling Win32 DLLs in C# with P/Invoke

另一种方法是使用.Net的Process类。使用Process,您不需要制作C ++代码DLL;您可以从C#代码开始将C ++ EXE作为一个过程。

答案 2 :(得分:1)

你可以让你的C ++程序将它的输出写入文件,并从文件中读取你的C#程序。

如果您的应用程序对性能非常敏感,那么这不是最佳方式。

这是运行C ++程序的C#代码:

        try
        {
            Process p = StartProcess(ExecutableFileName);
            p.Start();
            p.WaitForExit();
        }
        catch
        {
            Log("The program failed to execute.");
        }

现在您可以从C ++程序写入该文件,并在C#程序中读取该文件。

这将向您展示如何从C ++程序写入文件: http://www.cplusplus.com/doc/tutorial/files/

这将向您展示如何从C#程序中的文件中读取: http://msdn.microsoft.com/en-us/library/ezwyzy7b.aspx

答案 3 :(得分:0)

由于OP似乎没有留下任何进一步的评论,我想知道,会不会没有足够的?我想这归结为"它" in" 无论何时调用"。如果"它"指的是C ++程序,然后Andy Mikula的答案是最好的。如果"它"是指C#程序,然后我建议:

C:\>myCpluplus.exe | myCsharp.exe

,只需从myCsharp.exe中的Console.In中读取。