对等基础结构) (枚举

通过使用枚举,可以获取与条件匹配的所有特定对等实体的列表。

获取枚举并检索结果

  1. 获取枚举的句柄。 调用 PeerEnum 函数,例如,调用 PeerGraphEnumRecords Peer Graphing 函数。 PeerEnum 函数创建枚举,并将该枚举的句柄返回到调用应用程序。 此句柄必须用于检索结果。

  2. (可选)获取枚举中的实体数。 调用 GetItemCount 函数,例如调用 PeerGraphGetItemCountPeerGetItemCount

    注意

    可以使用 GetItemCount 函数返回的值来确定可检索的项数。

     

  3. 检索一组结果。 调用 GetNextItem 函数,例如调用 PeerGraphGetNextItem

    注意

    当应用程序调用 GetNextItem 函数时,它会指定要返回的实体数,然后函数返回指向实体的指针数组的指针,以及始终小于或等于指定数量的实体数的指针。 应用程序可能需要多次调用此函数,直到返回的实体数小于请求的数量。

     

  4. 不需要数据后,释放指向数据的指针。 调用 FreeData 函数,例如调用 PeerGraphFreeDataPeerFreeData

    注意

    有关详细信息,请参阅 释放对等数据

     

  5. 应用程序不需要枚举的句柄后,释放它。 调用 EndEnumeration 函数,例如,调用 PeerEndEnumerationPeerGraphEndEnumeration

枚举示例

以下代码片段演示如何通过可用标识枚举。

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