我正在为C / C ++库编写一个.NET适配器,其中一个方法是“bar”。采用常规stdio文件*。是否可以构建一个接口,以便托管代码用户可以传递托管(文件)流?那就是没有创建中间缓冲区和代码来管理数据。还假设bar()读取只会让事情变得更好吗?

// native code
void bar(FILE*);

// interface for managed code
void foo(System::IO::FileStream^ file)
{
    FILE* stdio_handle = ???;

    bar(stdio_handle);
}
有帮助吗?

解决方案

System.IO.FileStream。处理

它不一定是 stdio 句柄。这是一个Windows手柄。我认为 FileStream 不是基于 stdio 构建的,而是具有 stdio 句柄。

正如Marc在MSDN链接中指出并提到的那样,您可能需要考虑使用 SafeFileHandle 属性(如果您使用的是.NET 2.0+)而不是 Handle (这被认为是过时的)。但是,只有 Handle 可用于旧版本。

其他提示

  

是否可以构建界面   以便托管代码用户可以传递   托管(文件)流?

不,无法将流转换为文件描述符( FILE *)。

如果你必须有一个stdio句柄,你可以随时使用fopen来打开文件。 描述了一个导出c stdlib文件的包装器函数,然后他使用互操作来与他们合作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top