Megosztás a következőn keresztül:


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

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

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

     

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

     

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

     

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