C++ 使用WRL在IMapView上迭代

C++ 使用WRL在IMapView上迭代,c++,windows-phone-8,C++,Windows Phone 8,我需要迭代从Windows::ApplicationModel::Store::LicenseInformation获取的IMapView。它应该与标准的配合使用,因为我不能使用C++/CX,只能使用WRL 我现在只有ComPtr产品许可证如何将ProductLicense的内容获取到一些标准集合 谢谢我刚刚在另一个MS平台上遇到了相同的问题,遇到了这个未回答的问题。可能太晚了,但我就是这样解决的。 关键是IMapView继承自IIterable,因此需要获取IIterable接口(使用Quer

我需要迭代从
Windows::ApplicationModel::Store::LicenseInformation
获取的IMapView。它应该与标准的
配合使用,因为我不能使用C++/CX,只能使用WRL

我现在只有
ComPtr产品许可证如何将ProductLicense的内容获取到一些标准集合


谢谢

我刚刚在另一个MS平台上遇到了相同的问题,遇到了这个未回答的问题。可能太晚了,但我就是这样解决的。 关键是IMapView继承自IIterable,因此需要获取IIterable接口(使用QueryInterface)并获取迭代器。下面的代码是从我的平台到您的平台的改编,因此可能不是100%正确,但它提供了使用WRL进行迭代的关键元素

首先,获取可交互的接口和有效的迭代器

ComPtr<IMapView<IKeyValuePair<HSTRING,ProductLicense*>> map;
THROW_IF_FAILED(licenseInfo->get_ProductLicenses(&map));
unsigned int mapSize = 0;
THROW_IF_FAILED(map->get_Size(&mapSize));
wprintf(L"map size %i\n", mapSize);
ComPtr<IIterable<IKeyValuePair<HSTRING,ProductLicense*>*>> iterable;
panelMap.As(&iterable);
ComPtr<IIterator<IKeyValuePair<HSTRING,ProductLicense*>*>> iterator;
ComPtrget_产品许可证(&map));
无符号整数映射大小=0;
如果失败则抛出(映射->获取大小(&mapSize));
wprintf(L“映射大小%i\n”,映射大小);
可补偿的;
panelMap.As(&iterable);
ComPtr迭代器;
现在,您已经获得了进行迭代所需的所有信息。将迭代器设置为映射的第一个元素并开始迭代。下面的代码演示了迭代过程

THROW_IF_FAILED(iterable->First(&iterator));
boolean hasCurrent = false;
THROW_IF_FAILED(iterator->get_HasCurrent(&hasCurrent));

while(hasCurrent)
{
    ComPtr<IKeyValuePair<HSTRING,ProductLicense*>> pair;
    THROW_IF_FAILED(iterator->get_Current(&pair));
    HString key;
    THROW_IF_FAILED(pair->get_Key(&key));
    ComPtr<IProductLicense> license;
    THROW_IF_FAILED(pair->get_Value(&license));
    THROW_IF_FAILED(iterator->MoveNext(&hasCurrent));
}
IF_失败时抛出(iterable->First(&iterator));
布尔hasCurrent=false;
如果_失败,则抛出_(迭代器->获取_HasCurrent(&HasCurrent));
while(当前)
{
ComPtr对;
如果失败则抛出(迭代器->获取当前值(&pair));
hs串键;
如果失败则抛出(配对->获取密钥(&Key));
公司执照;
如果失败,则抛出(对->获取值(&license));
如果_失败,则抛出_(迭代器->移动下一步(&hasCurrent));
}
这在大多数支持WRL的windows平台上应该可以很好地工作,只需对一些方法进行少量的铰孔(例如,在我的平台迭代器->当前(..)中有一个稍微不同的名称)