2011-02-09 5 views
2

J'ai une application de console C++ qui s'exécute dans Visual Studio. Cela collecte les données et les affiche dans la console avec toutes les données brutes.Exécution d'une application de console C++ dans une application de console C#

Une autre application (C#) est utilisée pour collecter cette information et la présenter à l'interface utilisateur.

Est-il possible de combiner les deux en plaçant le C++ à l'intérieur du C# de sorte que les deux fonctionnent en même temps qu'un service avec l'application C++ produisant ses informations à un panneau ou quelque chose de similaire?

Merci! :)

+0

Est-il géré C++? Vous pouvez l'utiliser directement. S'il n'est pas géré, vous pouvez utiliser la classe 'Process' pour lancer un processus (l'application console). –

Répondre

4

Un exemple très rapide, je dois faire quelque chose comme je l'ai dit plus tôt est la suivante:

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(); 
     } 
    } 

sûrement ce n'est pas parfait, mais il a travaillé lors de l'exécution d'un script Powershell, je voyais la sortie dans une mise à jour de zone de texte multiligne chaque fois que quelque chose de nouveau est sorti, la méthode qui a mis à jour ma zone de texte était le logMessage()

+0

merci pour la soumission. Je vous ai donné un vote Quelles directives d'utilisation sont nécessaires pour les fonctions Process et StreamReader à partir de ce code? –

+0

si je veux avoir 2 commandLineArgs est-ce que je lister juste myProcess.StartInfo.Arguments = commandLineArgs 2x ou permettre 2 lignes dessous? Qu'est-ce que StartInfo dans cette instance? Merci ! –

0

Si je comprends bien, vous pouvez exécuter l'application C++ à partir de votre application C#, vous démarrez dans un autre processus et vous redirigez la sortie standard de ce processus afin que vous puissiez le consommer comme vous le souhaitez, comme par exemple vous pouvez le mettre dans un panneau.

0

Il semble que vous ayez besoin de lire depuis le stdout de l'application console à partir de l'application UI. This article montre comment ce type de chose est fait en C (sur Windows). Je suis sûr qu'avec un peu de recherche vous trouverez comment le faire en C# (car c'est une fonctionnalité du système d'exploitation, pas une fonctionnalité de langue).

Questions connexes