Énumérations (infrastructure d’homologue)
À l’aide des énumérations, vous pouvez obtenir une liste de toutes les entités homologues spécifiques qui correspondent à vos critères.
Pour obtenir une énumération et récupérer les résultats
Obtenez un handle pour l’énumération. Appelez une fonction PeerEnum , par exemple, appelez la fonction PeerGraphEnumRecords Peer Graphing. Les fonctions PeerEnum créent l’énumération et retournent un handle à cette énumération à l’application appelante. Ce handle doit être utilisé pour récupérer les résultats.
Si vous le souhaitez, obtenez le nombre d’entités dans l’énumération. Appelez une fonction GetItemCount , par exemple, appelez PeerGraphGetItemCount ou PeerGetItemCount.
Notes
Vous pouvez utiliser la valeur retournée par la fonction GetItemCount pour déterminer le nombre d’éléments disponibles à récupérer.
Récupérer un groupe de résultats. Appelez une fonction GetNextItem , par exemple, appelez PeerGraphGetNextItem.
Notes
Lorsqu’une application appelle une fonction GetNextItem , elle spécifie le nombre d’entités à retourner, puis la fonction retourne un pointeur vers un tableau de pointeurs vers les entités, ainsi que le nombre d’entités, qui est toujours inférieur ou égal au nombre spécifié. Une application peut avoir besoin d’appeler cette fonction plusieurs fois, jusqu’à ce que le nombre d’entités retournées soit inférieur au nombre demandé.
Une fois que les données ne sont pas nécessaires, libérez le pointeur vers les données. Appelez une fonction FreeData , par exemple, appelez PeerGraphFreeData ou PeerFreeData.
Notes
Pour plus d’informations, consultez Freeing Peer Data.
Une fois que l’application n’a pas besoin du handle dans l’énumération, relâchez-la. Appelez une fonction EndEnumeration , par exemple, appelez PeerEndEnumeration ou PeerGraphEndEnumeration.
Exemple d’énumération
L’extrait de code suivant vous montre comment énumérer les identités disponibles.
#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;
}