3
我試圖重定向輸出到stdout/stderr從C#中的第三方本機dll的輸出。 stdout和stderr的輸出應該轉到日誌文件。從C#重定向原生dll標準輸出/標準錯誤#
這是我的想法(X2的兩個流):
- 創建AnonymousPipeServerStream
- 通過
_outServer.SafePipeHandle.DangerousGetHandle()
- 使用的P/Invoke獲取管道的句柄調用SetStdHandle與所述處理
- 創建連接到服務器流的AnonymousPipeClientStream
- 創建一個線程以便從
AnonymousPipeClientStream
並輸出到記錄器。 - 定期調用
flush
在AnonymousPipeServerStream
所以這一切似乎運作良好...我的代碼中。只要控制傳遞到本機DLL,一切都會回到stderr!如果需要的話,我可以調試到本機DLL並查看出了什麼問題,但是......我真的不想,在我花費10個小時試圖弄清楚句柄如何工作之前,任何人都有任何想法。
僅供參考,測試代碼爲:http://pastebin.com/f3eda7c8。有趣的東西是構造函數中的第58-89行。 (當然,我會在後面添加錯誤處理等)。
pastebin.com上的代碼似乎有一些錯誤。例如。在兩個線程中使用char緩衝區「_buffer」... – Stiefel 2011-01-21 12:00:26
@Stiefel - 哎呀,是的,它的確如此。我非常快速地把它們扔在一起,IIRC。 – 2011-01-23 14:28:09