【问题标题】:Capture StandardOutput from a third party DLL从第三方 DLL 捕获 StandardOutput
【发布时间】:2013-09-25 17:09:56
【问题描述】:

我有一个从我的程序调用的 DLL,它将状态输出到 Visual Studio 输出窗口(假设这是标准输出),我想在运行时捕获该输出。

所有有关如何执行此操作的示例都假定我正在使用 Process 启动外部应用程序或控制台应用程序,然后从 Process 实例中捕获 StandardOutput,我自己已经多次这样做了。但在这种情况下,我的程序直接调用 DLL——我没有启动额外的进程。

当我的程序调用 DLL 时,我想读取它打印到标准输出的内容以记录它以进行调试,如果 DLL 失败,我可能会退出我的程序。当 DLL 调用返回时,我的程序应该会正常继续。

我知道我需要另一个线程来处理 DLL 输出,而我的另一个线程在 DLL 调用中;我只是不知道如何首先捕获输出。

【问题讨论】:

    标签: c# vb.net dll redirectstandardoutput


    【解决方案1】:

    您的程序可以调用Console.SetOut 来用您自己的实现替换标准输出流。

    这应该允许您根据需要捕获标准输出。请注意,您可能还需要替换标准错误流,具体取决于 DLL 写入输出的方式。

    【讨论】:

    • 这似乎不起作用。这是我的实现: Dim ms As New MemoryStream() Dim tr As New StreamWriter(ms) Console.SetError(tr) ' Also Tried Console.SetOut(tr) ' 在此处调用 DLL 方法。 tr.Flush() ms.Position = 0 Dim sr As StreamReader = New StreamReader(ms) Dim myStr As String = sr.ReadToEnd()
    猜你喜欢
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多