IEnumPortableDeviceObjectIDs::Next メソッド (portabledeviceapi.h)
Next メソッドは、列挙シーケンス内の次の 1 つ以上のオブジェクト ID を取得します。
構文
HRESULT Next(
[in] ULONG cObjects,
[in, out] LPWSTR *pObjIDs,
[in, out] ULONG *pcFetched
);
パラメーター
[in] cObjects
要求されたオブジェクトの数。
[in, out] pObjIDs
取得したオブジェクト ID を指定する LPWSTR ポインターの配列。 呼び出し元は 、cObjects LPWSTR 要素の配列を割り当てる必要があります。 呼び出し元は、配列と返される文字列の両方を解放する必要があります。 文字列は、 CoTaskMemFree を呼び出すことによって解放されます。
[in, out] pcFetched
入力時、このパラメーターは無視されます。 出力時に、実際に取得された ID の数。 オブジェクト ID が解放されておらず、戻り値がS_FALSE場合、列挙するオブジェクトはこれ以上ありません。
戻り値
このメソッドは HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。
リターン コード | 説明 |
---|---|
|
メソッドが成功しました。 |
|
列挙するオブジェクトはこれ以上ありません。 |
注釈
シーケンス内に残っている要素の数が要求された数より少ない場合、このメソッドは残りの要素を取得します。 実際に取得される要素の数は 、pcFetched を介して返されます (呼び出し元がそのパラメーターに NULL で渡されない限り)。 列挙オブジェクトはすべてピアです。つまり、オブジェクトの子を列挙すると、孫やより深いオブジェクトではなく、直接の子のみが列挙されます。
例
// This number controls how many object identifiers are requested during each call
// to IEnumPortableDeviceObjectIDs::Next()
#define NUM_OBJECTS_TO_REQUEST 10
// Recursively called function which enumerates using the specified
// object identifier as the parent.
void RecursiveEnumerate(LPCWSTR wszParentObjectID, IPortableDeviceContent* pContent)
{
HRESULT hr = S_OK;
IEnumPortableDeviceObjectIDs* pEnumObjectIDs = NULL;
if ((wszParentObjectID == NULL) ||
(pContent == NULL))
{
return;
}
// wszParentObjectID is the object identifier of the parent being used for enumeration
// Get an IEnumPortableDeviceObjectIDs interface by calling EnumObjects with the
// specified parent object identifier.
hr = pContent->EnumObjects(0, wszParentObjectID, NULL, &pEnumObjectIDs);
if (FAILED(hr))
{
// Failed to get IEnumPortableDeviceObjectIDs from IPortableDeviceContent
}
// Loop calling Next() while S_OK is being returned.
while(hr == S_OK)
{
DWORD cFetched = 0;
LPWSTR szObjectIDArray[NUM_OBJECTS_TO_REQUEST] = {0};
hr = pEnumObjectIDs->Next(NUM_OBJECTS_TO_REQUEST, // Number of objects to request on each NEXT call
szObjectIDArray, // Array of LPWSTR array which will be populated on each NEXT call
&cFetched); // Number of objects written to the LPWSTR array
if (SUCCEEDED(hr))
{
// Traverse the results of the Next() operation and recursively enumerate
// Remember to free all returned object identifiers using CoTaskMemFree()
for (DWORD dwIndex = 0; dwIndex < cFetched; dwIndex++)
{
RecursiveEnumerate(szObjectIDArray[dwIndex],pContent);
// Free allocated LPWSTRs after the recursive enumeration call has completed.
CoTaskMemFree(szObjectIDArray[dwIndex]);
szObjectIDArray[dwIndex] = NULL;
}
}
}
// Release the IEnumPortableDeviceObjectIDs when finished
if (pEnumObjectIDs != NULL)
{
pEnumObjectIDs->Release();
pEnumObjectIDs = NULL;
}
}
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | portabledeviceapi.h |
Library | PortableDeviceGUIDs.lib |