Enumerálások (társinfrastruktúra)
Az Enumerálások használatával lekérjük az összes olyan társentitást, amely megfelel a feltételeknek.
Enumerálás lekérése és az eredmények lekérése
Szerezzen be egy leírót az enumeráláshoz. Hívjon meg egy PeerEnum függvényt, például hívja meg a PeerGraphEnumRecords Peer Graphing függvényt. A PeerEnum függvény létrehozza az enumerálást, és visszaad egy leírót az enumeráláshoz a hívó alkalmazásnak. Ezt a fogópontot kell használni az eredmények lekéréséhez.
Igény szerint szerezze be az enumerálásban szereplő entitások számát. Hívjon meg egy GetItemCount függvényt, például hívja meg PeerGraphGetItemCount vagy PeerGetItemCount.
Jegyzet
A GetItemCount függvény által visszaadott értéket használhatja a lekérhető elemek számának meghatározásához.
Eredménycsoport lekérése. Hívjon meg egy GetNextItem függvényt, például hívja meg PeerGraphGetNextItem.
Jegyzet
Amikor egy alkalmazás meghív egy GetNextItem függvényt, megadja a visszaadandó entitások számát, majd a függvény egy mutatót ad vissza az entitások mutatóinak tömbjéhez, valamint az entitások számát, amely mindig kisebb vagy egyenlő a megadott számnál. Előfordulhat, hogy egy alkalmazásnak többször is meg kell hívnia ezt a függvényt, amíg a visszaadott entitások száma nem kisebb, mint a kért szám.
Miután az adatokra nincs szükség, szabadítsd fel az egérmutatót az adatokhoz. Meghívhat FreeData függvényt, például meghívhatja PeerGraphFreeData vagy PeerFreeData.
Jegyzet
További információ: Társadatok felszabadítása.
Miután az alkalmazásnak nincs szüksége a leíróra az enumeráláshoz, engedje fel. Hívjon meg egy EndEnumeration függvényt, például hívja PeerEndEnumeration vagy PeerGraphEndEnumeration.
Példa enumerálásra
Az alábbi kódrészlet bemutatja, hogyan lehet számba adni az elérhető identitásokon keresztül.
#include <p2p.h>
#include <stdio.h>
#pragma comment(lib, "p2p.lib")
//-----------------------------------------------------------------------------
// Function: EnumIdentities
//
// Purpose: Demonstrate how to enumerate identities.
//
// Returns: HRESULT
//
HRESULT EnumIdentities(void)
{
HPEERENUM hPeerEnum = NULL;
HRESULT hr = PeerEnumIdentities(&hPeerEnum);
if (SUCCEEDED(hr))
{
ULONG cIdentities = 0;
hr = PeerGetItemCount(hPeerEnum, &cIdentities);
if (SUCCEEDED(hr))
{
ULONG i;
for (i = 0; i < cIdentities; i++)
{
ULONG cItem = 1; // process one result at a time
PEER_NAME_PAIR ** ppNamePair = NULL; // pointer to an array of pointers
hr = PeerGetNextItem(hPeerEnum, &cItem, (PVOID**) &ppNamePair);
if (SUCCEEDED(hr) && (1 == cItem))
{
wprintf(L"%s [%s]\r\n", (*ppNamePair)->pwzFriendlyName, (*ppNamePair)->pwzPeerName);
PeerFreeData(ppNamePair);
}
}
}
PeerEndEnumeration(hPeerEnum);
}
return hr;
}