gpt4 book ai didi

c# - 是否可以将 .net Stream 包装为 STL std::ostream*?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:03 25 4
gpt4 key购买 nike

我有一个非托管 C++ 库,可将文本输出到 std::ostream*。

我从 C# 库使用的托管 C++ 包装器中调用它。

目前我向非托管代码传递一个指向 std::stringstream 的指针,然后调用 System.String(stringstream.str().c_str()) 将我的非托管缓冲区复制回 .net 友好字符串。

是否可以将 .net Stream 包装为 STL std::ostream*? - 允许我将文本直接从非托管代码流式传输到托管 STREAM 实现。

最佳答案

如果我没理解错的话,你想用 C++ std 流包装 .NET 流,这样你的 native 代码就会流入 C++ std 流,但数据最终会进入 .NET 流。

C++ IO 流大致分为流本身,它完成 C++ 类型和二进制表示之间的所有转换,以及流缓冲区,它缓冲数据并从设备读取/写入设备。为了实现您的目标,您需要做的是使用写入 .NET 流的流缓冲区。为此,您需要创建自己的流缓冲区,派生自 std::stream_buffer,它在内部引用 .NET 流并将所有数据转发给它。您将其传递给 std::ostream 对象,该对象被传递给 native 代码。

编写自己的流缓冲区不是初学者的任务,但也不是特别难。在 C++ IO 流上选择任何合适的引用(Langer/Kreft 是您可以在纸上找到的最好的引用),找出您需要覆盖哪些虚函数才能做到这一点,然后您就完成了。

关于c# - 是否可以将 .net Stream 包装为 STL std::ostream*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1467529/

25 4 0