Sdílet prostřednictvím


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ů

  1. 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ů.

  2. 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í.

     

  3. 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.

     

  4. 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.

     

  5. 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;
}