Comment puis-je rediriger stdout pour certains d'affichage visible dans une Application Windows?

J'ai accès à une bibliothèque tierce qui n'a de "bonnes choses". Il émet l'état et l'évolution des messages sur la sortie standard stdout. Dans une application de Console je vois ces messages de l'amende juste. Dans une application Windows, ils ont juste aller le seau bits.

Est-il une manière assez simple de redirection de stdout et stderr vers un contrôle de texte ou d'un autre endroit visible. Idéalement, cela n'aurait besoin d'aucune recompilation du code tiers. Il serait juste d'intercepter les vapeurs à un faible niveau. J'aimerais une solution où je viens de #inclure l'en-tête, appeler la fonction d'initialisation et de lier la bibliothèque comme dans...

#include "redirectStdFiles.h"

void function(args...)
{
  TextControl* text = new TextControl(args...);
  initializeRedirectLibrary(text, ...);

  printf("Message that will show up in the TextControl\n");
  std::cout << "Another message that also shows up in TextControl\n";
}

Serait encore mieux si elle utilisait une interface que j'ai pu la remplacer si elle n'est pas liée à un quelconque bibliothèque d'interface graphique.

class StdFilesRedirector
{
  public:
    writeStdout(std::string const& message) = 0;
    writeStderr(std::string const& errorMessage) = 0;
    readStdin(std::string &putReadStringHere) = 0;
};

Suis-je en train de rêver? Ou quelqu'un sait-il quelque chose qui peut faire quelque chose de ce genre?

Modifier après deux réponses: je pense que l'utilisation d'freopen pour rediriger les fichiers est une bonne première étape. Pour une solution complète, il faudrait un nouveau fil de discussion créé pour lire le fichier et afficher le résultat. Pour le débogage, faire un "tail-f" dans une fenêtre shell cygwin serait suffisant. Pour une plus poli de l'application... Qui est ce que je veux écrire... il y aura un peu de travail supplémentaire à la création du thread, etc.

  • AllocConsole est la pièce manquante. Il produit les familiers de la fenêtre de la console. La lire et écrire les fonctions sont difficiles à faire, mais vous pouvez rediriger la sortie standard stdout/stdin vers/depuis assez facilement à l'aide de cette méthode: stackoverflow.com/a/15547699/133836
InformationsquelleAutor JoeBieg | 2009-02-21