c# - 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 上运行。
解决方案
您可以使用GetStdHandle获取标准输入(STD_INPUT_HANDLE)、输出(STD_OUTPUT_HANDLE)和错误(STD_ERROR_HANDLE)文件的句柄。
然后,您可以使用 WriteFile、ReadFile 函数写入和读取这些文件。
之后,如果您仍然需要 FILE 结构,请按照以下步骤创建一个。
推荐阅读
- java - 在支付网关之间维护钱包
- laravel - 使用 axios 下载 pdf - vuejs
- django - OS X Yosemite 中 Docker Toolbox 的 Django 服务器连接错误
- java - 冲突的方法参数
- mysql - MySQL Workbench 迁移向导上的语法错误
- elasticsearch - 如何确保在 ElasticSearch 中索引的所有文档
- python - 将重 XML 解析为有序字典
- android - 试图从地点选择器中找到位置,但它会打开和关闭
- php - 请求实体太大错误 413:联系表格 7 附件发送到电子邮件
- html - 如何垂直对齐包装器或整个容器?