PInvoking stdin, stdout 和 stderr 到非托管 dll
PInvoking stdin, stdout and stderr to unmanaged 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。
您可以使用 GetStdHandle 获取标准输入 (STD_INPUT_HANDLE)、输出 (STD_OUTPUT_HANDLE) 和错误 (STD_ERROR_HANDLE) 文件的句柄。
然后您可以使用 WriteFile、ReadFile 函数写入和读取这些文件。
之后,如果您还需要 FILE 结构,请按照以下步骤创建一个。
How make FILE* from HANDLE in WinApi?
我有一个包含如下内容的 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。
您可以使用 GetStdHandle 获取标准输入 (STD_INPUT_HANDLE)、输出 (STD_OUTPUT_HANDLE) 和错误 (STD_ERROR_HANDLE) 文件的句柄。
然后您可以使用 WriteFile、ReadFile 函数写入和读取这些文件。
之后,如果您还需要 FILE 结构,请按照以下步骤创建一个。
How make FILE* from HANDLE in WinApi?