2013-09-25 57 views
1

我有一個DLL,我從我的程序調用輸出狀態到Visual Studio輸出窗口(假設這是標準輸出),並且我想在運行時捕獲該輸出。捕獲來自第三方DLL的StandardOutput

如何做到這一點的所有示例假設我正在使用Process來啓動外部應用程序或控制檯應用程序,然後從Process實例捕獲StandardOutput,我自己已經完成了幾次。但在這種情況下,我的程序直接調用DLL - 我沒有開始一個額外的過程。

雖然我的程序正在調用DLL,但我想要讀取它打印到標準輸出的內容,以記錄它的調試情況,如果DLL失敗,可能會退出我的程序。當DLL調用返回時,我的程序應該正常繼續。

我知道我需要另一個線程來處理DLL輸出,而我的另一個線程是在DLL調用;我只是不知道如何捕捉輸出。

回答

2

您的程序可能會調用Console.SetOut以用您自己的實現替換標準輸出流。

這應該允許您根據需要捕獲標準輸出。請注意,您可能還需要替換標準錯誤流,具體取決於DLL如何編寫輸出。

+0

這似乎並不奏效。下面是我的實現: 昏暗毫秒作爲新的MemoryStream() 昏暗TR作爲新的StreamWriter(MS) Console.SetError(TR) '也試過Console.SetOut(TR) ' 調用DLL方法在這裏。 tr.Flush() ms.Position = 0 Dim sr As StreamReader = New StreamReader(ms) Dim myStr As String = sr.ReadToEnd() –