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

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

谢谢!

最佳答案

可能还有其他方法可以为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
}

关于c++ - 从IBuffer获取ComPtr <IStream>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33148778/

10-11 23:09