【发布时间】:2018-09-25 16:51:27
【问题描述】:
我正在使用一个示例 UWP C++/CX 程序,该程序创建两个 UDP 网络通信线程,它们使用 Windows::Storage::Streams::DataWriter 和 Windows::Storage::Streams::DataReader 相互发送数据,同时更新显示来回数据的显示窗口。
使用Platform::String 变量和DataWriter->WriteString() 的初始实现运行良好。但是现在我想实现一个二进制协议,它具有包含各种类型信息的可变长度缓冲区。
DataReader->ReadBuffer() 和 DataWriter->WriteBuffer() 需要 Windows::Storage::Streams::Buffer。
要访问ReadBuffer() 返回的缓冲区,我正在使用一个函数,如果在Obtaining pointers to data buffers (C++/CX) 的网络上找到其源代码,则类似于Getting an array of bytes out of Windows::Storage::Streams::IBuffer 中的答案
#include <robuffer.h>
byte* GetPointerToPixelData(IBuffer^ pixelBuffer, unsigned int *length)
{
if (length != nullptr)
{
*length = pixelBuffer->Length;
}
// Query the IBufferByteAccess interface.
Microsoft::WRL::ComPtr<IBufferByteAccess> bufferByteAccess;
reinterpret_cast<IInspectable*>(pixelBuffer)->QueryInterface(IID_PPV_ARGS(&bufferByteAccess));
// Retrieve the buffer data.
byte* pixels = nullptr;
bufferByteAccess->Buffer(&pixels);
return pixels;
}
但是我一直不知道如何将本机结构复制到缓冲区中,以便可以使用DataWriter->WriteBuffer() 将其发送出去。
如果我有一些二进制数据结构,我如何将这个结构的内容复制到输出Windows::Storage::Streams::Buffer 以与DataWriter->WriteBuffer() 一起使用?
【问题讨论】:
标签: uwp visual-studio-2017 c++-cx