В настоящее время я портирую приложение UWP с C ++ / CX на C ++ / WinRT.Я столкнулся с safe_cast<Platform::IBoxArray<byte>^>(data)
, где data
имеет тип Windows::Foundation::IInspectable ^
.
Я знаю, что safe_cast
представлен методом as<T>
, и я знаю, что есть функции для бокса (winrt::box_value
) и распаковка (winrt::unbox_value
) в WinRT / C ++.
Однако мне нужно знать эквивалент Platform::IBoxArray
для выполнения приведения (QueryInterface).Согласно https://docs.microsoft.com/de-de/cpp/cppcx/platform-iboxarray-interface?view=vs-2017, IBoxArray
является эквивалентом C ++ / CX Windows::Foundation::IReferenceArray
, но winrt::Windows::Foundation::IReferenceArray
...
нет обновления для nackground: Что яя пытаюсь добиться получения извлечения преобразования вида, прикрепленного HoloLens к каждому образцу Media Foundation со своей камеры.Мой код основан на https://github.com/Microsoft/HoloLensForCV,, и у меня действительно все работает, кроме этого последнего шага.Проблема находится вокруг этого куска кода:
static const GUID MF_EXTENSION_VIEW_TRANSFORM = {
0x4e251fa4, 0x830f, 0x4770, 0x85, 0x9a, 0x4b, 0x8d, 0x99, 0xaa, 0x80, 0x9b
};
// ...
// In the event handler, which receives const winrt::Windows::Media::Capture::Frames::MediaFrameReader& sender:
auto frame = sender.TryAcquireLatestFrame();
// ...
if (frame.Properties().HasKey(MF_EXTENSION_VIEW_TRANSFORM)) {
auto /* IInspectable */ userData = frame.Properties().Lookup(MF_EXTENSION_VIEW_TRANSFORM);
// Now I would have to do the following:
// auto userBytes = safe_cast<Platform::IBoxArray<Byte> ^>(userData)->Value;
//viewTransform = *reinterpret_cast<float4x4 *>(userBytes.Data);
}