0

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

// native code
void bar(FILE*);

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

    bar(stdio_handle);
}
4

3 回答 3

5

System.IO.FileStream.Handle

不一定要stdio处理。这是一个 Windows 句柄。我不认为FileStream是建立在stdio有一个stdio句柄的基础上的。

正如 Marc 在 MSDN 链接中指出和提到的,您可能需要考虑使用SafeFileHandle属性(如果您使用的是 .NET 2.0+)而不是Handle(现在被认为已过时)。不过,仅Handle在旧版本中可用。

于 2009-05-04T08:30:42.793 回答
0

是否可以构建一个接口,以便托管代码用户可以传递托管(文件)流?

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

于 2009-05-04T08:38:51.540 回答
0

如果你必须有一个 stdio 句柄,你总是可以首先使用 fopen 打开文件。描述了一个用于导出 c stdlib 文件函数的包装器,然后他使用互操作来处理它们。

于 2009-05-04T14:59:55.260 回答