【问题标题】:PInvoking stdin, stdout and stderr to unmanaged dll [duplicate]PInvoking stdin、stdout 和 stderr 到非托管 dll [重复]
【发布时间】:2019-06-23 11:55:58
【问题描述】:

我有一个 C 头文件,其中包含如下内容:

void init(FILE* in, FILE* out, FILE* err);

我猜这等同于以下 PInvoke 签名:

[DllImportAttribute("mylib", EntryPoint = "init")]
public static extern void init(IntPtr @in, IntPtr @out, IntPtr err);

顺便说一下,我想调用这个方法。我能以某种方式从 Console.In、Console.Out、Console.Error 获取 IntPtr 吗?

它应该在 Linux 和 Windows 上运行,而不是只在 Windows 上运行。

【问题讨论】:

  • 不重复。也需要在 Linux 上工作。

标签: c# pinvoke


【解决方案1】:

您可以使用GetStdHandle 获取标准输入(STD_INPUT_HANDLE)、输出(STD_OUTPUT_HANDLE)和错误(STD_ERROR_HANDLE)文件的句柄。

然后您可以使用 WriteFile、ReadFile 函数写入和读取这些文件。

之后,如果您仍然需要 FILE 结构,请按照以下步骤创建一个。

How make FILE* from HANDLE in WinApi?

【讨论】:

  • 应该提到它,但我在 Linux 上工作。不过,我会把它标记为正确的:)
  • 感谢您的回复 :),所以实际上在 linux 中,您可以使用 fdopen 获取文件描述符的 FILE 结构。 FILE *f = fdopen(STDOUT_FILENO, "w");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2013-05-13
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
相关资源
最近更新 更多