从IBuffer获取ComPtr <istream>

时间:2015-10-15 12:37:44

标签: c++ windows com std uwp

我正在努力连接两个API。从一个我得到Windows::Storage::IBuffer,另一个要求ComPtr<IStream>.我似乎没有办法桥接这两个,即使我想在流中复制数据。< / p>

到目前为止,从IBuffer前进的唯一方法是创建一个Windows::Storage::Streams::DataReader::FromBuffer(buffer).从那里开始,我可以ReadBytes获取Platform::Array<unsigned char>数组,但接着是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

可能有其他方法可以为IBuffer获取COM兼容的IStream接口,但如果您有数据字节,则可以使用CreateStreamOnHGlobal API在内存上创建COM IStream,然后将字节复制到新的IStream。在交出之前不要忘记重置搜索指针。

[DllImport("ole32.dll")]
private static extern int CreateStreamOnHGlobal(IntPtr hGlobal, bool fDeleteOnRelease, out IStream ppstm);

System.Runtime.InteropServices.ComTypes stm;
if (CreateStreamOnHGlobal(IntPtr.Zero, true, out stm) == 0)
{
    stm.Write( ...data for the stream... );

    stm.Seek(0, 0, IntPtr.Zero);  // seek to start of stream
}