Question

J'essaie de rediriger la sortie d'une dll native tierce qui renvoie vers stdout / stderr à partir de C #. La sortie de stdout et stderr devrait aller dans un fichier journal.

Voici mon idée (x2 pour deux flux):

  • Créez un AnonymousPipeServerStream
  • Obtenez le handle du tuyau via _outServer.SafePipeHandle.DangerousGetHandle ()
  • Utilisez P / Invoke pour appeler SetStdHandle avec ladite poignée
  • Créez un AnonymousPipeClientStream connecté à le flux du serveur
  • Créez un fil de discussion placé dans une boucle à partir de AnonymousPipeClientStream et exporté vers le consignateur.
  • Appelez régulièrement flush sur le AnonymousPipeServerStream

Donc tout cela semble bien fonctionner ... dans mon code. Dès que le contrôle passe à la DLL native, tout retourne à stderr! Si besoin est, je peux déboguer dans la DLL native et voir ce qui ne va pas, mais… je ne préfère vraiment pas, alors quelqu'un a-t-il une idée avant de passer 10 heures à essayer de comprendre le fonctionnement des poignées?

Pour référence, le code de test se trouve à: http://pastebin.com/f3eda7c8 . Ce qui est intéressant, ce sont les lignes 58 à 89 du constructeur. (J'ajouterai le traitement des erreurs, etc. plus tard, bien sûr).

Était-ce utile?

La solution

Je l'ai résolu, bien que la solution (bien sûr) ait très peu à voir avec le problème. La dll a été compilée dans mingw, ce qui ne respecte apparemment pas les descripteurs utilisés par le runtime MSVC.

Je vais laisser le code & amp; solution au cas où quelqu'un d'autre rencontrerait ce problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top