Bagikan melalui


Enumerasi (Infrastruktur Serekan)

Dengan menggunakan Enumerasi, Anda dapat memperoleh daftar semua entitas serekan tertentu yang sesuai dengan kriteria Anda.

Untuk mendapatkan enumerasi dan mengambil hasil

  1. Dapatkan handel ke enumerasi. Panggil fungsi PeerEnum, misalnya, panggil fungsi PeerGraphEnumRecords Peer Graphing. Fungsi PeerEnum membuat enumerasi, dan mengembalikan handel ke enumerasi tersebut ke aplikasi panggilan. Handel ini harus digunakan untuk mengambil hasilnya.

  2. Secara opsional, dapatkan jumlah entitas dalam enumerasi. Panggil fungsi GetItemCount, misalnya, panggil PeerGraphGetItemCount atau PeerGetItemCount.

    Nota

    Anda dapat menggunakan nilai yang dikembalikan oleh fungsi GetItemCount untuk menentukan jumlah item yang tersedia untuk diambil.

     

  3. Ambil sekelompok hasil. Panggil fungsi GetNextItem, misalnya, panggil PeerGraphGetNextItem.

    Nota

    Ketika aplikasi memanggil fungsi GetNextItem, aplikasi menentukan jumlah entitas yang akan dikembalikan, lalu fungsi mengembalikan penunjuk ke array pointer ke entitas, dan jumlah entitas, yang selalu kurang dari atau sama dengan angka yang ditentukan. Aplikasi mungkin perlu memanggil fungsi ini berkali-kali—hingga jumlah entitas yang dikembalikan kurang dari angka yang diminta.

     

  4. Setelah data tidak diperlukan, bebaskan penunjuk ke data. Panggil fungsi FreeData, misalnya, panggil PeerGraphFreeData atau PeerFreeData.

    Nota

    Untuk informasi selengkapnya, lihat Membebaskan Data Serekan.

     

  5. Setelah aplikasi tidak memerlukan handel ke enumerasi, lepaskan. Panggil fungsi EndEnumeration, misalnya, panggilPeerEndEnumeration atau PeerGraphEndEnumeration.

Contoh Enumerasi

Cuplikan kode berikut menunjukkan kepada Anda cara menghitung melalui identitas yang tersedia.

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