将stdin,stdout和stderr调用到非托管dll

时间:2019-06-23 11:55:58

标签: c# pinvoke

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

1 个答案:

答案 0 :(得分:1)

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

然后您可以使用WriteFile,ReadFile函数来读写这些文件。

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

How make FILE* from HANDLE in WinApi?