J'ai accès à une bibliothèque tierce qui fait de "bonnes choses". Il envoie des messages d'état et de progression à stdout. Dans une application de console, je peux voir ces messages très bien. Dans une application Windows, ils vont simplement au bit bit.Comment rediriger stdout vers un affichage visible dans une application Windows?
Existe-t-il un moyen assez simple de rediriger stdout et stderr vers un contrôle de texte ou un autre endroit visible. Idéalement, cela ne nécessiterait aucune recompilation du code de tiers. Il aurait juste intercepter les vapeurs à un niveau bas. Je voudrais une solution où je viens #Include l'en-tête, appelez la fonction d'initialisation et de relier 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 qui je pouvais passer outre il est pas lié à une bibliothèque GUI particulière.
class StdFilesRedirector
{
public:
writeStdout(std::string const& message) = 0;
writeStderr(std::string const& errorMessage) = 0;
readStdin(std::string &putReadStringHere) = 0;
};
Je rêve juste? Ou est-ce que quelqu'un sait quelque chose qui peut faire quelque chose comme ça? Éditer après deux réponses: Je pense qu'utiliser freopen pour rediriger les fichiers est une bonne première étape. Pour une solution complète, un nouveau thread doit être créé pour lire le fichier et afficher la sortie. Pour le débogage, faire un 'tail -f' dans une fenêtre shell cygwin serait suffisant. Pour une application plus polie ... Ce qui est ce que je veux écrire ... il y aurait du travail supplémentaire pour créer le thread, etc.
'AllocConsole' est la pièce manquante. Il produit la fenêtre de la console familière. Les fonctions de lecture et d'écriture sont gênantes, mais vous pouvez facilement rediriger stdout/stdin vers/depuis cette méthode en utilisant cette méthode: https://stackoverflow.com/a/15547699/133836 –