system.io.stream< - >原生C ++文件*

时间:2011-10-09 09:07:55

标签: c++ file stream stdout

我得到了一个DLL(C ++ native),它需要一个FILE *参数,因为它使用fwrite等操作。 我不想将生成的数据导出到文件,而是导出到.NET CLR System.IO.Stream(它是一个Web应用程序,我想使用HttpContext.Response.OutputStream)

我开始使用stdout并尝试将其进一步链接到输出流,但是它会产生一些问题,而且当它是多线程时我担心它不能正常工作......(只有一个标准输出)。

我正在寻找这个问题几天,似乎无法找到一个好的解决方案。

谢谢,

克里斯托夫

1 个答案:

答案 0 :(得分:0)

C FILE * API不可扩展。因此没有记录的方法来使用FILE *包装System.IO.Stream。也许你可以以某种方式破解CRT,虽然我对此表示怀疑,因为它可能使用全球状态。

使用System.IO.Stream包装文件*应该很简单。只需实现Stream接口,该接口从FILE *。

中读取序列

如果您可以将iostream对象传递给本机界面,那么您的生活会更轻松。也许您可以修改本机部分(或请求此DLL的开发人员)使用iostream(实际上是streambuf)接口而不是FILE *。

编辑:有一个hack,您可以创建一个单独的进程来运行DLL并将stdin / stdout作为FILE *对象传递给本机接口。另一方面,通过System.IO.Stream创建一个管道并对其进行读/写。

编辑2: It's possible to do this without creating a new process.