2013-09-25 60 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() –