Windows C++: Comment puis-je rediriger stderr pour les appels à fprintf?

Je suis d'emballage existantes du code C++ à partir d'un BSD projet dans notre propre enveloppe et je veux l'intégrer à notre code avec aussi peu de changements que possible. Ce code utilise fprintf à imprimer à stderr afin de log /rapport d'erreurs.

Je veux rediriger vers un autre lieu dans le même processus. Sur Unix je l'ai fait avec un socketpair et un thread: une extrémité de la douille est là que j'ai envoyer stderr (via un appel à dup2) et l'autre extrémité est surveillé dans un fil de discussion où je peux ensuite le processus de la sortie.

Cela ne fonctionne pas sur Windows mais parce que le socket n'est pas le même comme un descripteur de fichier.

Tous les documents que j'ai trouvé sur le web montrent comment rediriger la sortie d'un processus enfant, ce qui n'est pas ce que je veux. Comment puis-je rediriger stderr dans le même processus d'obtention d'un rappel de la sorte, lorsque la sortie est écrite? (et avant de vous le dire, j'ai essayé SetStdHandle mais ne peut pas trouver un moyen de faire fonctionner)...

OriginalL'auteur jkp | 2008-08-11