我得到了一个DLL (c++原生),它需要一个FILE *参数,因为它使用fwrite等操作。我不想导出生成的数据到一个文件,但到。net CLR System.IO.Stream(这是一个web应用程序,我想使用HttpContext.Response.OutputStream)
我开始使用标准输出,并试图将其进一步链接到输出流,但它给出了一些问题,我担心它不会工作得很好,当它是多线程的…(只有一个标准输出)。
这个问题我找了几天了,似乎找不到一个好的解决方案。
谢谢,摩挲
C FILE* API不可扩展。因此,没有任何文档可以用FILE*来包装System.IO.Stream。也许你可以破解CRT,尽管我对此表示怀疑,因为它可能使用全局状态。
用System.IO.Stream包装FILE*应该很简单。只需实现从FILE*.
读取序列的Stream接口。如果你可以传递一个iostream对象到本机接口,你的生活将会更容易。也许您可以修改本机部分(或请求此DLL的开发人员)以使用iostream(实际上是streambuf)接口而不是FILE*.
EDIT:有一个hack,你可以创建一个单独的进程来运行DLL,并将stdin/stdout作为FILE*对象传递给本机接口。另一方面,创建一个管道并通过System.IO.Stream对其进行读写。
EDIT 2:可以在不创建新进程的情况下执行此操作。