首页 > 解决方案 > PInvoking stdin、stdout 和 stderr 到非托管 dll

问题描述

我有一个 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 上运行。

标签: c#pinvoke

解决方案


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

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

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

如何在 WinApi 中从 HANDLE 制作 FILE*?


推荐阅读