从 Windows::Storage::Streams::IBuffer 中获取字节数组

新手上路,请多包涵

我有一个实现接口 Windows::Storage::Streams::IBuffer 的对象,我想从中获取一个字节数组,但是在查看文档时,这个接口看起来非常无用,并且文档没有提供任何参考可以与此接口结合以实现我的目的的任何其他类。到目前为止,我在谷歌上发现的只是对 .Net 类 WindowsRuntimeBufferExtensions 的引用,但我使用的是 C++,所以这也是一个死胡同。

有人可以提示如何在 C++ 中从 Windows::Storage::Streams::IBuffer 获取字节数组吗?

原文由 Alam Brito 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 905
2 个回答

您可以通过奇异的 COM 强制转换使用 IBufferByteAccess:

 byte* GetPointerToPixelData(IBuffer^ buffer)
{
   // Cast to Object^, then to its underlying IInspectable interface.

   Object^ obj = buffer;
   ComPtr<IInspectable> insp(reinterpret_cast<IInspectable*>(obj));

   // Query the IBufferByteAccess interface.
   ComPtr<IBufferByteAccess> bufferByteAccess;
   ThrowIfFailed(insp.As(&bufferByteAccess));

   // Retrieve the buffer data.

   byte* pixels = nullptr;
   ThrowIfFailed(bufferByteAccess->Buffer(&pixels));

   return pixels;

}

http://cm-bloggers.blogspot.fi/2012/09/accessing-image-pixel-data-in-ccx.html 复制的代码示例

原文由 Berthier Lemieux 发布,翻译遵循 CC BY-SA 3.0 许可协议

如前所述,来自命名空间 WindowsRuntimeBufferExtensionsSystem::Runtime::InteropServices::WindowsRuntime 仅适用于 .Net 应用程序,不适用于本机 C++ 应用程序。

一个可能的解决方案是使用 Windows::Storage::Streams::DataReader

 void process(Windows::Storage::Streams::IBuffer^ uselessBuffer)
{
    Windows::Storage::Streams::DataReader^ uselessReader =
             Windows::Storage::Streams::DataReader::FromBuffer(uselessBuffer);
    Platform::Array<Byte>^ managedBytes =
                         ref new Platform::Array<Byte>(uselessBuffer->Length);
    uselessReader->ReadBytes( managedBytes );
    BYTE * bytes = new BYTE[uselessBuffer->Length];
    for(int i = 0; i < uselessBuffer->Length; i++)
        bytes[i] = managedBytes[i];

    (...)
}

原文由 Alam Brito 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题