Výčty (infrastruktura partnerského vztahu)
Pomocí výčtů můžete získat seznam všech konkrétních entit partnerského vztahu, které odpovídají vašim kritériím.
Získání výčtu a načtení výsledků
Získejte popisovač výčtu. Volání funkce PeerEnum, například volání PeerGraphEnumRecords Peer Graphing. Funkce PeerEnum vytvoří výčet a vrátí popisovač pro tento výčet volající aplikaci. Tento popisovač se musí použít k načtení výsledků.
Volitelně můžete získat počet entit v výčtu. Volání funkce GetItemCount, například volání PeerGraphGetItemCount nebo PeerGetItemCount.
Poznámka
Hodnotu vrácenou funkcí GetItemCount můžete použít k určení počtu položek, které jsou k dispozici k načtení.
Načtení skupiny výsledků Volání funkce GetNextItem, například volání PeerGraphGetNextItem.
Poznámka
Když aplikace volá funkci GetNextItem, určuje počet entit, které se mají vrátit, a pak funkce vrátí ukazatel na pole ukazatelů na entity a počet entit, které jsou vždy menší nebo rovny zadanému číslu. Aplikace může tuto funkci volat mnohokrát – dokud počet vrácených entit není menší než požadovaný počet.
Jakmile data nepotřebujete, uvolněte ukazatel na data. Volání funkce FreeData, například volání PeerGraphFreeData nebo PeerFreeData.
Poznámka
Další informace najdete v tématu uvolnění partnerských dat.
Jakmile aplikace popisovač výčtu nepotřebuje, uvolněte ji. Volání funkce EndEnumeration, například volání PeerEndEnumeration nebo PeerGraphEndEnumeration.
Příklad výčtu
Následující fragment kódu ukazuje, jak vytvořit výčet prostřednictvím dostupných identit.
#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;
}