gpt4 book ai didi

c# - 从 C# 中重定向 native dll stdout/stderr

转载 作者:行者123 更新时间:2023-11-30 12:18:45 26 4
gpt4 key购买 nike

我正在尝试重定向从 C# 中输出到 stdout/stderr 的第三方 native dll 的输出。 stdout 和 stderr 的输出都应该进入日志文件。

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

  • 创建一个 AnonymousPipeServerStream
  • 通过_outServer.SafePipeHandle.DangerousGetHandle()获取管道句柄
  • 使用 P/Invoke 调用 SetStdHandle带有所述 handle
  • 创建一个 AnonymousPipeClientStream连接到服务器流
  • 创建一个线程,使其处于从 AnonymousPipeClientStream 读取并输出到记录器的循环中。
  • 定期调用 AnonymousPipeServerStream 上的 flush

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

供引用,测试代码在:http://pastebin.com/f3eda7c8 .有趣的是构造函数中的第 58-89 行。 (当然,我稍后会添加错误处理等)。

最佳答案

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

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

关于c# - 从 C# 中重定向 native dll stdout/stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1430213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com