【问题标题】:system.io.stream <-> native C++ FILE *system.io.stream <-> 本机 C++ 文件 *
【发布时间】:2011-10-09 09:07:54
【问题描述】:

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

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

我为此问题搜索了几天,但似乎找不到好的解决方案。

谢谢,

克里斯托夫

【问题讨论】:

标签: c++ file stream stdout


【解决方案1】:

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

使用 System.IO.Stream 包装 FILE* 应该很简单。只需实现从 FILE* 读取序列的 Stream 接口。

如果您可以将 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.

【讨论】:

  • 感谢您的回复。 - 修改 DLL 是不可能的 :-( - 我想尽可能正确地保留代码 - 它必须是多线程准备好的,这会失败。此时我正在查看一个本机 C++ 模块。如果我可以一起使用 WriteEntityChunks使用 FILE * 然后我就准备好了。
猜你喜欢
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 2011-03-17
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
相关资源
最近更新 更多