2016-12-28 4 views
0

WRL (Windows 런타임 템플릿 라이브러리)을 사용하여 WinRT API에 액세스하는 Win32 앱이 있습니다.WinRT에 기본 C++ 통과 가능

네이티브 C++에서 IIterable을 사용하는 함수를 호출하려면 어떻게해야합니까? 내 문제는 IIterable 또는 IVector을 구현하는 것을 얻는 것입니다. 구체적인 예를 들어

, 나는에 SetDefaultMenuItems 전화를 원하는 가정 포함 \ 10.0.14393.0 \ winrt \ windows.ui.input.h :

namespace ABI { 
namespace Windows { 
namespace UI { 
namespace Input { 

    MIDL_INTERFACE("A6B79ECB-6A52-4430-910C-56370A9D6B42") 
    IRadialControllerConfiguration : public IInspectable 
    { 
     public: 
      virtual HRESULT STDMETHODCALLTYPE SetDefaultMenuItems( 
      /* [in] */ __RPC__in_opt __FIIterable_1_Windows__CUI__CInput__CRadialControllerSystemMenuItemKind *buttons) = 0; 
     // ... 
    }; 
} 
} 
} 
} 

하는의 재고 구현이있을 것 같지 않습니다 IIterable 또는 IVector (네이티브 C++ 용)

+0

'std :: vector'를 통해 [VectorView] (https://code.msdn.microsoft.com/windowsapps/Windows-Runtime-Component-9b6c6989/sourcecode?fileId=113783&pathId=1623023906)를 구성 할 수 있습니다. 또는 표준 C++ 콜렉션 유형과 일치하는 기타 적절한 컨테이너 래퍼가 있어야합니다. – IInspectable

+0

IVectorView를 구현하는 런타임 구성 요소를 만들어야합니다. 그런 다음 해당 사용자 지정 구성 요소를 사용하여 IIterable을 API로 전달해야합니까? –

+0

'IVectorView' 인터페이스가 없습니다. 'VectorView'는'IIterable' 인터페이스를 구현하는 클래스 템플릿입니다. 'IIterable' 인터페이스를 기대하는 함수에'VectorView'에 대한 포인터를 즉시 전달할 수 있습니다. COM, C++ 또는 COM을 구현하는 데 C++가 사용되는 방식을 이해하지 못했기 때문에 여기에서 완전히 손실 된 것처럼 들립니다. 그리고 나서 WRL은 당신이 먼저 습득 할 필요가있는 또 다른 추상화를 추가합니다. 이것은 잘 끝나지 않을 것입니다. 처음부터 다시 시작하고 기초에 익숙해 져야합니다. – IInspectable

답변

1

나는 내가 원하는 것을하기 위해 cppwinrt을 사용했다. 이것으로 바닐라 표준 컨테이너를 WinRT에 전달할 수있었습니다.