2011-02-09 2 views
2

Visual Studio에서 실행되는 C++ 콘솔 앱이 있습니다. 이렇게하면 데이터가 수집되어 모든 원시 데이터와 함께 콘솔에 표시됩니다.C# 콘솔 앱 내에서 C++ 콘솔 앱 실행

다른 정보 (C#)는이 정보를 수집하여 UI에 표시하는 데 사용됩니다.

IT는 C# 한 내부 C++ 하나를 넣어 두 가지를 결합하는 것이 가능되도록 C++ 응용 프로그램은 패널 또는 유사한 아무것도의 정보를 출력 한 서비스로 동시에 두 실행?

감사합니다. :)

+0

관리되는 C++입니까? 직접 사용할 수 있습니다. 그것이 관리되지 않으면'Process' 클래스를 사용하여 프로세스 (콘솔 응용 프로그램)를 시작할 수 있습니다. 제출에 대한 감사합니다 –

답변

4

매우 빠른 예는 이것이다 새로운 것이 나올 때마다 내 텍스트 상자를 업데이트 한 방법은 logMessage()입니다.

+0

. 내가 너에게 표를 줬어! 이 코드에서 Process 및 StreamReader 함수에 필요한 지시문은 무엇입니까? –

+0

는 난 그냥 myProcess.StartInfo.Arguments = commandLineArgs 배를 나열하거나 그 아래 2 줄을 허용 할 2 commandLineArgs을 갖고 싶어? 이 인스턴스에서 StartInfo는 무엇입니까? 감사 ! –

0

내가 이해하는 것처럼 C# 응용 프로그램에서 C++ 응용 프로그램을 실행할 수 있으며 다른 프로세스에서 시작하고 해당 프로세스의 표준 출력을 리디렉션하여 원하는 방식으로 사용할 수 있습니다. 예를 들어 패널에 넣을 수 있습니다.

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 스크립트를 실행할 때, 나는 여러 줄 텍스트 상자 업데이트의 출력을보고 있었다 일 : 내가 전에 말했듯이 내가 뭔가를해야

0

UI 응용 프로그램에서 콘솔 응용 프로그램의 stdout에서 읽어야 할 것과 같은 소리가납니다. This 기사에서는 이러한 유형의 작업이 C (Windows)에서 어떻게 수행되는지 보여줍니다. 나는 당신이 (이 운영 체제 기능이 아닌 언어 기능의로) C#에서 그것을 할 방법을 찾을 수 있습니다 연구의 비트와 함께 확신합니다.