2009-09-15 120 views
3

我試圖重定向輸出到stdout/stderr從C#中的第三方本機dll的輸出。 stdout和stderr的輸出應該轉到日誌文件。從C#重定向原生dll標準輸出/標準錯誤#

這是我的想法(X2的兩個流):

  • 創建AnonymousPipeServerStream
  • 通過_outServer.SafePipeHandle.DangerousGetHandle()
  • 使用的P/Invoke獲取管道的句柄調用SetStdHandle與所述處理
  • 創建連接到服務器流的AnonymousPipeClientStream
  • 創建一個線程以便從AnonymousPipeClientStream並輸出到記錄器。
  • 定期調用flushAnonymousPipeServerStream

所以這一切似乎運作良好...我的代碼中。只要控制傳遞到本機DLL,一切都會回到stderr!如果需要的話,我可以調試到本機DLL並查看出了什麼問題,但是......我真的不想,在我花費10個小時試圖弄清楚句柄如何工作之前,任何人都有任何想法。

僅供參考,測試代碼爲:http://pastebin.com/f3eda7c8。有趣的東西是構造函數中的第58-89行。 (當然,我會在後面添加錯誤處理等)。

+0

pastebin.com上的代碼似乎有一些錯誤。例如。在兩個線程中使用char緩衝區「_buffer」... – Stiefel 2011-01-21 12:00:26

+0

@Stiefel - 哎呀,是的,它的確如此。我非常快速地把它們扔在一起,IIRC。 – 2011-01-23 14:28:09

回答

3

我解決了它,雖然解決方案(當然)與問題很少有關。該DLL在mingw編譯,顯然不尊重MSVC運行時使用的句柄。

我會離開代碼&解決方案,以防其他人遇到此問題。

相關問題