Dela via


Uppräkningar (peer-infrastruktur)

Med hjälp av uppräkningar kan du hämta en lista över alla specifika peer-entiteter som matchar dina kriterier.

Hämta en uppräkning och hämta resultatet

  1. Hämta ett handtag till uppräkningen. Anropa en PeerEnum-funktion, till exempel anropa funktionen PeerGraphEnumRecords Peer Graphing. Funktionerna PeerEnum skapar uppräkningen och returnerar ett handtag till uppräkningen till det anropande programmet. Det här handtaget måste användas för att hämta resultatet.

  2. Du kan också hämta antalet entiteter i uppräkningen. Anropa en GetItemCount-funktion, till exempel anropa PeerGraphGetItemCount eller PeerGetItemCount.

    Not

    Du kan använda värdet som returneras av funktionen GetItemCount för att fastställa antalet tillgängliga objekt som ska hämtas.

     

  3. Hämta en grupp med resultat. Anropa funktionen GetNextItem, till exempel anropa PeerGraphGetNextItem.

    Not

    När ett program anropar en Funktionen GetNextItem anger det antalet entiteter som ska returneras och sedan returnerar funktionen en pekare till en matris med pekare till entiteterna och antalet entiteter, som alltid är mindre än eller lika med det angivna talet. Ett program kan behöva anropa den här funktionen många gånger – tills antalet entiteter som returneras är mindre än det begärda antalet.

     

  4. När data inte behövs frigör du pekaren till data. Anropa en FreeData-funktion, till exempel anropa PeerGraphFreeData eller PeerFreeData.

    Not

    Mer information finns i Freeing Peer Data.

     

  5. När programmet inte behöver handtaget till uppräkningen släpper du det. Anropa en EndEnumeration-funktion, till exempel anropa PeerEndEnumeration eller PeerGraphEndEnumeration.

Exempel på en uppräkning

Följande kodfragment visar hur du räknar upp genom tillgängliga identiteter.

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