2016-12-28 3 views
0

У меня есть приложение Win32, которое использует WRL (Библиотека шаблонов времени выполнения Windows) для доступа к API WinRT.Исходный C++, проходящий через Iterable для WinRT

Как мне обратиться к функции, которая принимает IIterable из родного C++? Моя проблема заключается в получении чего-то, что реализует IIterable или IVector.

В качестве конкретного примера, предположим, что я хотел назвать SetDefaultMenuItems в Include \ 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

Вы можете создать вектор [VectorView] (https://code.msdn.microsoft.com/windowsapps/Windows-Runtime-Component-9b6c6989/sourcecode?fileId=113783&pathId=1623023906) над 'std :: vector', или любую другую соответствующую контейнерную упаковку, соответствующую типу коллекции Standard C++. – IInspectable

+0

Мне нужно создать компонент времени выполнения, который реализует IVectorView. Затем я должен попытаться использовать этот пользовательский компонент, чтобы передать IIterable в API? –

+0

Интерфейс 'IVectorView' отсутствует. 'VectorView' - это шаблон класса, который реализует интерфейс' IIterable'. Вы можете сразу передать указатель на вектор VectorView в функцию, ожидающую интерфейс 'IIterable'. Это действительно звучит так, будто вы полностью потеряны здесь, вероятно, потому, что не понимаете COM, C++ или как C++ используется для реализации COM. И тогда WRL добавляет еще одну абстракцию, которую вы должны сначала освоить. Это вряд ли закончится хорошо. Вам нужно будет начать все сначала и ознакомиться с основами. – IInspectable

ответ

1

В итоге я использовал cppwinrt, чтобы делать то, что хотел. С этим я смог передать ванильные контейнеры std и т. Д. В WinRT.

Смежные вопросы