2011-02-09 5 views
2

私はVisual Studioで動作するC++コンソールアプリを持っています。これにより、データが収集され、すべての生データとともにコンソールに表示されます。C#コンソールアプリ内でC++コンソールアプリを実行する

この情報を収集してUIに表示するには、別のアプリ(C#)を使用します。

C++をC#の中に入れて両方を同時に実行できるようにすることはできますか?C++アプリケーションがその情報をパネルなどに出力するのと同時に1つのサービスとして実行されますか?

ありがとうございます! :)

+0

C++で管理されていますか?あなたはそれを直接使うことができます。管理されていない場合は、 'Process'クラスを使用してプロセス(コンソールアプリケーション)を起動することができます。 –

答えて

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()でした。

+0

提出いただきありがとうございます。私はあなたにアップ票をくれました!このコードのProcessおよびStreamReader関数には、どのディレクティブを使用する必要がありますか? –

+0

2つのcommandLineArgsを持っていたい場合は、myProcess.StartInfo.Arguments = commandLineArgsを2倍にリストするか、その下に2行を許可しますか?このインスタンスでStartInfoとは何ですか?ありがとう! –

0

私が理解しているように、C#アプリケーションからC++アプリケーションを実行し、別のプロセスで起動し、そのプロセスの標準出力をリダイレクトして、必要な方法で消費できるようにすることができます。例えば、あなたはそれをパネルに入れることができます。

0

UIアプリケーションからコンソールアプリケーションのstdoutを読む必要があります。 This記事では、このようなことがC(Windows)上でどのように行われるかを示しています。私はC#でそれを行う方法を見つける研究のビットを持っていると確信しています(それは言語機能ではなくオペレーティングシステムの機能なので)。

関連する問題