2016-12-28 30 views
0

我有一个使用WRL(Windows运行时模板库)访问WinRT API的Win32应用程序。本地C++将IIterable传递给WinRT

我该如何去调用一个函数,该函数需要从本机C++获取IIterable?我的问题是获得实施IIterableIVector的东西。

举一个具体的例子,假设我想叫在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; 
     // ... 
    }; 
} 
} 
} 
} 

似乎没有成为一个股票实施原生C++的IIterableIVector

+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'接口。您可以立即将指向'VectorView'的指针传递给期望有'IIterable'接口的函数。这听起来像是你完全迷失在这里,可能是因为你不了解COM,C++,或者C++如何用于实现COM。然后WRL再添加一个你需要先掌握的抽象。这不太可能结束。你必须重新开始并熟悉基础知识。 – IInspectable

回答

1

我结束了使用cppwinrt做我想要的。有了这个,我能够将香草标准容器等传递给WinRT。