У меня есть приложение 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++.
Вы можете создать вектор [VectorView] (https://code.msdn.microsoft.com/windowsapps/Windows-Runtime-Component-9b6c6989/sourcecode?fileId=113783&pathId=1623023906) над 'std :: vector', или любую другую соответствующую контейнерную упаковку, соответствующую типу коллекции Standard C++. – IInspectable
Мне нужно создать компонент времени выполнения, который реализует IVectorView. Затем я должен попытаться использовать этот пользовательский компонент, чтобы передать IIterable в API? –
Интерфейс 'IVectorView' отсутствует. 'VectorView' - это шаблон класса, который реализует интерфейс' IIterable'. Вы можете сразу передать указатель на вектор VectorView в функцию, ожидающую интерфейс 'IIterable'. Это действительно звучит так, будто вы полностью потеряны здесь, вероятно, потому, что не понимаете COM, C++ или как C++ используется для реализации COM. И тогда WRL добавляет еще одну абстракцию, которую вы должны сначала освоить. Это вряд ли закончится хорошо. Вам нужно будет начать все сначала и ознакомиться с основами. – IInspectable