在C#控制台应用程序中运行c ++控制台应用程序

时间:2011-02-09 15:40:04

标签: c# c++ service console-application

我有一个在visual studio中运行的c ++控制台应用程序。这将收集数据并在控制台中显示所有原始数据。

另一个应用程序(C#)用于收集此信息并将其呈现给用户界面。

是否可以通过将C ++一个放在C#中来将两者结合起来,以便两者同时运行,而C ++应用程序将其信息输出到面板或类似的东西?

谢谢! :)

3 个答案:

答案 0 :(得分:4)

一个非常快速的例子我必须做的事情就像我之前说的那样:

private void executeCommand(string programFilePath, string commandLineArgs, string workingDirectory)
    {
        Process myProcess = new Process();

        myProcess.StartInfo.WorkingDirectory = workingDirectory;
        myProcess.StartInfo.FileName = programFilePath;
        myProcess.StartInfo.Arguments = commandLineArgs;
        myProcess.StartInfo.UseShellExecute = false;
        myProcess.StartInfo.CreateNoWindow = true;
        myProcess.StartInfo.RedirectStandardOutput = true;
        myProcess.StartInfo.RedirectStandardError = true;
        myProcess.Start();

        StreamReader sOut = myProcess.StandardOutput;
        StreamReader sErr = myProcess.StandardError;

        try
        {
            string str;

            // reading errors and output async...

            while ((str = sOut.ReadLine()) != null && !sOut.EndOfStream)
            {   
              logMessage(str + Environment.NewLine, true);
              Application.DoEvents();
              sOut.BaseStream.Flush();
            }

            while ((str = sErr.ReadLine()) != null && !sErr.EndOfStream)
            {
              logError(str + Environment.NewLine, true);
              Application.DoEvents();
              sErr.BaseStream.Flush();
            }

            myProcess.WaitForExit();
        }
        finally
        {
            sOut.Close();
            sErr.Close();
        }
    }

当然它并不完美,但它在执行powershell脚本时有效,我看到多线文本框中的输出在每次出现新内容时都会更新,更新我的文本框的方法是logMessage()

答案 1 :(得分:0)

据我了解,您可以从C#应用程序运行c ++应用程序,在另一个进程中启动它,然后重定向该进程的标准输出,以便您能够以您希望的方式使用它,例如你可以把它放在一个小组中。

答案 2 :(得分:0)

听起来您需要从UI应用程序中读取控制台应用程序的stdoutThis文章展示了如何在C(在Windows上)完成此类事情。我肯定通过一些研究你会发现如何在C#中做到这一点(因为它是一个操作系统功能,而不是语言功能)。