gpt4 book ai didi

c++ - 使用 WRL 迭代 IMapView

转载 作者:行者123 更新时间:2023-11-30 04:15:22 25 4
gpt4 key购买 nike

我需要遍历从 Windows::ApplicationModel::Store::LicenseInformation 获得的 IMapView .它应该与标准 for_each 一起使用,我不能使用 C++/CX,只能使用 WRL。

我现在只有ComPtr<IMapView<HSTRING, ProductLicense*>> productLicences;我如何才能将 productLicences 的内容添加到某些标准集合中?

谢谢

最佳答案

我刚刚在不同的 MS 平台上遇到了同样的问题,并遇到了这个 Unresolved 问题。可能为时已晚,但这就是我解决它的方式。关键是IMapView继承自IIterable,所以需要获取IIterable接口(interface)(使用QueryInterface),获取Iterator。以下代码是从我的平台到您的平台的改编,因此它可能不是 100% 正确,但它提供了使用 WRL 进行迭代的关键元素。

首先,获取IIterable接口(interface)和一个有效的Iterator。

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;

现在您拥有了进行迭代所需的所有信息。将迭代器设置为 Map 的第一个元素并开始迭代。下面的代码说明了迭代过程。

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));
}

这在大多数支持 WRL 的 Windows 平台上应该可以正常工作,对某些方法进行少量扩充(例如,在我的平台迭代器中->Current(..) 的名称略有不同)。

关于c++ - 使用 WRL 迭代 IMapView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18331939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com