【发布时间】:2017-01-06 02:58:25
【问题描述】:
我有一个使用 WRL(Windows 运行时模板库)访问 WinRT API 的 Win32 应用。
如何调用从原生 C++ 获取 IIterable 的函数?我的问题是获得实现IIterable 或IVector 的东西。
作为一个具体的例子,假设我想在 Include\10.0.14393.0\winrt\windows.ui.input.h 中调用SetDefaultMenuItems:
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++,似乎没有 IIterable 或 IVector 的现有实现。
【问题讨论】:
-
您可以在
std::vector之上构造VectorView,或任何其他与您的标准C++ 集合类型匹配的适当容器包装器。 -
我需要创建一个实现IVectorView的运行时组件。然后我应该尝试使用该自定义组件来让 IIterable 传递给 API?
-
没有
IVectorView接口。VectorView是一个类模板,它实现了IIterable接口。您可以立即将指向VectorView的指针传递给期望IIterable接口的函数。这听起来真的让你完全迷失了,可能是因为你不了解 COM、C++ 或如何使用 C++ 来实现 COM。然后 WRL 添加了另一个你需要首先掌握的抽象。这不太可能有好的结局。您必须重新开始并熟悉基础知识。 -
你说得对,我是新人。
标签: c++ winapi windows-runtime wrl