2010-02-07 12 views
4

J'ai une DLL non managée qui écrit des messages de journal sur la sortie standard. J'appelle cette DLL avec P-invoque d'une application WPF et j'ai besoin d'obtenir le journal de flux de sortie standard. J'ai essayé Console.SetOut, mais cela ne semble capturer que les informations écrites à l'aide de Console.Write, etc.Obtention de la sortie standard lorsque p-invocation à une DLL non managée?

Vous avez des idées? J'ai trouvé similar questions demandé ailleurs, mais ils n'ont pas de réponses.

+0

Avez-vous envisagé d'écrire votre DLL native intermédiaire qui appelle cette DLL, capture la stdout, puis renvoie tout à gérer via P/Invoke? –

+0

Je suppose que c'est possible. Bien que ce serait vraiment ennuyeux parce que je voudrais afficher les données à leur retour, il faudrait donc interroger ainsi que cette bibliothèque d'encapsuleur supplémentaire. J'espère qu'il y a une façon plus propre de le faire. – RandomEngy

Répondre

2

Puisque vous appelez déjà PInvoke, je suppose que vous ne serez pas dérangé par un appel supplémentaire à SetStdHandle. Un fil similaire est ici Redirect stdout+stderr on a C# Windows service

+0

En fait, j'ai trouvé cela après avoir posé la question, mais malheureusement, cela n'a pas fonctionné pour moi. Peut-être que le fait que ce soit compilé de manière croisée à partir de MinGW est en train de jouer avec le flux de sortie en quelque sorte. Je vais essayer d'obtenir une autre DLL et voir si la méthode de construction change quelque chose. – RandomEngy

+0

Accepter ... exécute différemment mes actes MinGW .dll compilés de manière croisée. Je devais l'avoir capturer sa propre sortie et appeler un rappel que je lui ai donné via Pinvoke. – RandomEngy