通过使用枚举,可以获取符合条件的所有特定对等实体的列表。
获取枚举并检索结果
获取枚举的句柄。 调用 PeerEnum 函数,例如,调用 PeerGraphEnumRecords Peer Graphing 函数。 PeerEnum 函数创建枚举,并将该枚举的句柄返回到调用应用程序。 此句柄必须用于检索结果。
(可选)获取枚举中的实体数。 调用 GetItemCount 函数,例如 调用 peerGraphGetItemCount 或 PeerGetItemCount。
注意
可以使用 GetItemCount 函数返回的值来确定可供检索的项数。
检索一组结果。 调用 GetNextItem 函数,例如调用 peerGraphGetNextItem。
注意
当应用程序调用 GetNextItem 函数时,它将指定要返回的实体数,然后函数返回指向指向实体的指针数组的指针以及实体数(始终小于或等于指定的数字)。 应用程序可能需要多次调用此函数,直到返回的实体数小于请求的实体数。
不需要数据后,释放指向数据的指针。 调用 FreeData 函数,例如,调用 PeerGraphFreeData 或 PeerFreeData。
注意
有关详细信息,请参阅 释放对等数据。
应用程序不需要枚举的句柄后,请释放它。 例如,调用 EndEnumeration 函数,例如 调用 peerEndEnumeration 或 PeerGraphEndEnumeration。
枚举示例
以下代码片段演示如何枚举可用标识。
#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;
}