我正在尝试重定向第三方本机 dll 的输出,该 dll 从 C# 内输出到 stdout/stderr。stdout 和 stderr 的输出都应保存到日志文件中。

这是我的想法(两个流 x2):

  • 创建一个 匿名管道服务器流
  • 通过获取管道的句柄 _outServer.SafePipeHandle.DangerousGetHandle()
  • 使用P/Invoke进行调用 设置标准句柄 与所述手柄
  • 创建一个 匿名管道客户端流 连接到服务器流
  • 创建一个线程以循环读取 AnonymousPipeClientStream 并输出到记录器。
  • 定期致电 flushAnonymousPipeServerStream

所以这一切似乎运作良好......在我的代码中。一旦控制权传递到本机 DLL,一切都会返回到 stderr!如果需要,我可以调试本机 DLL 并查看出了什么问题,但是......我真的不想,所以在我花 10 个小时试图弄清楚如何处理工作之前,有人有任何想法吗?

作为参考,测试代码位于: http://pastebin.com/f3eda7c8. 。有趣的是构造函数中的第 58-89 行。(我将添加错误处理等。当然,稍后)。

有帮助吗?

解决方案

我解决了它,尽管解决方案(当然)与问题无关。该 dll 是在 mingw 中编译的,它显然不尊重 MSVC 运行时使用的句柄。

我将保留代码和解决方案,以防其他人遇到此问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top