通过CLI将fstream(或等效的)从C#传递到C++

Aar*_*onN 8 c# c++ command-line-interface

如何将C#中的fstream或等效项通过CLI传递给非托管C++ DLL?

粗略的应用大纲:

  • C#应用程序从数据库中读取二进制文件
  • 非托管C++ DLL用于"解码"此文件并返回其中包含的信息
  • 我可以修改任何C#代码.CLI包装器是我可以修改的C++端的唯一部分.

我目前正在将二进制文件保存到磁盘并将其路径传递给CLI包装器,它将作为fstream打开.这适用于测试目的,但由于显而易见的原因不适用于生产.

我还研究了将一个字节数组传递给DLL,但是我无法找到将其转换为除了GlobalAlloc以外的其他fstream的方法,我不想使用它.

任何帮助或想法将不胜感激.

谢谢.

Jam*_*ton 2

您可以将托管二进制数组传递给 C++/CLI DLL。固定阵列。然后可以将其转换为 STL 字符串对象。然后,您可以将 STL 字符串传递到继承自 iostream 的 STL stringstream 对象。将 stringstream 视为 .NET MemoryBuffer 对象。将 stringstream 传递给非托管 C++。这可能可以用不到 10 行代码来完成。缺点是数据将被复制到内存中,效率低下。对于许多应用程序来说,我怀疑这会是一个问题。

或者,您可以编写自己的类,继承自stream_buffer 来包装.NET 流对象。(最好继承它而不是像其他人建议的那样继承 iostream)。这将是最有效的方法,因为不会不必要地复制内存,但如果第一种方法足够快,我就不会费心这样做。