Windows runtime 如何将Platform::Array转换为原始int16*

Windows runtime 如何将Platform::Array转换为原始int16*,windows-runtime,c++-cx,Windows Runtime,C++ Cx,我有一个运行时组件,其中需要来自某个给定平台::数组的原始指针int16*。类似于int16缓冲区[20],但我不知道编译时的大小 在不给缓冲区一个固定大小的情况下,我如何获得这个值 ConvertArray(const Platform::Array<uint16>^ bytes) { int16 buffer[bytes->Length]; // doens't work int16 buffer[20]; // works, but I never k

我有一个运行时组件,其中需要来自某个给定平台::数组的原始指针int16*。类似于int16缓冲区[20],但我不知道编译时的大小

在不给缓冲区一个固定大小的情况下,我如何获得这个值

ConvertArray(const Platform::Array<uint16>^ bytes)
{
    int16 buffer[bytes->Length];   // doens't work
    int16 buffer[20]; // works, but I never know what size it needs to be
    ....
}

有什么建议吗

如果您所需要的一切都是获取指向数据的原始指针,例如将其提供给某个C库,则通常可以从更高级别的数据结构中获取这样的指针

您可以从带有Array.Data的Platform::Array数组中获取原始指针

类似地,您可以使用vec.data从std::vector vec获取原始指针


但在执行此操作时需要注意一点:根据数据结构的不同,请参阅其文档,以这种方式获得的原始指针在修改数据结构时可能会失效。对于std::vector,在插入或删除元素(即更改大小)时会发生这种情况,因为实现可能会选择为内容重新分配不同大小的内存。

使用std::vector。或者Platform::ArrayI确实需要a int16[],因为我使用的第三个pary库只包含int16 const*数据,这并不意味着不能使用向量来存储它。可以使用.data从向量中获取原始指针。也许我对Platform::Array也可以这样做,因为我知道的还不够多,所以你根本不需要做任何转换;参考新平台::数组,然后->数据工作得很好!我想标记你的答案,但不能在评论上做。我现在确实把它作为答案写了下来。但为什么要使用新的另一个平台阵列?你已经有了。您这样做,并复制数据,仅仅因为一个类型是无符号的,而另一个不是?那是不必要的。您可以将原始指针从.Data强制转换为另一个.Platform::Array数组和Array.Data,以便用于不使用Platform::Array的旧的第三方代码。但是在我的版本中,我在std::vector vec中找不到数据。。。也许是因为它是可观察的。Tnx的答案。