Создание экземпляра SpatialSurfaceObserver с помощью WRL

Я пытаюсь использовать класс SpatialSurfaceObserver для Windows Mixed Reality. Я следил за этим: https://developer.microsoft.com/en-us/windows/mixed-reality/spatial_mapping_in_directx

Однако я наткнулся на блокпост. В примере указано, что я должен просто создать экземпляр следующим образом: m_surfaceObserver = ref new SpatialSurfaceObserver();

Однако я использую чистый C++, без C#, без C++/CX и т. д. Пока это не было проблемой, я ожидал использовать фабрику активации для создания экземпляра, но, насколько я могу судить, для этого класса не содержит никакой функции для создания экземпляра.

В основном я думал использовать это:

using namespace ABI::Windows::Perception::Spatial;
ComPtr<Surfaces::ISpatialSurfaceObserverStatics> observerFactory;
ABI::Windows::Foundation::GetActivationFactory(HStringReference(RuntimeClass_Windows_Perception_Spatial_Surfaces_SpatialSurfaceObserver).Get(), &observerFactory);

observerFactory->someCreatorFunction(...);

Но нет никакой функции, которую я мог бы использовать.

Затем я нашел ActivateInstance и подумал, что это должно сработать:

ComPtr<Surfaces::ISpatialSurfaceObserver> observer;
ABI::Windows::Foundation::ActivateInstance(HStringReference(RuntimeClass_Windows_Perception_Spatial_Surfaces_SpatialSurfaceObserver).Get(), &observer);

Но это тоже не компилируется, всегда жалуется, что ISpatialSurfaceObserver не содержит член «InterfaceType».

Я также столкнулся с «Make» и «MakeAndActivate», но не совсем понял, как их использовать и подходят ли они для моего случая.

Есть идеи, что мне не хватает?


person Jan    schedule 23.07.2017    source источник


Ответы (1)


Здесь нет никакого опыта, но есть одна идея, которую можно попробовать.

ABI::Windows::Foundation::ActivateInstance(HStringReference(RuntimeClass_Windows_Perception_Spatial_Surfaces_SpatialSurfaceObserver).Get(), &observer);

Не могли бы вы попробовать позвонить

::RoActivateInstance(HStringReference(RuntimeClass_Windows_Perception_Spatial_Surfaces_SpatialSurfaceObserver).Get(), &observer);

Некоторые ссылки, которые могут быть полезны:

person Kasperi    schedule 23.07.2017
comment
Вау, это действительно отлично работает! Большое спасибо, вы спасли мой день :) - person Jan; 24.07.2017