IEnumIDList
COM公式ドキュメント
Shell フォルダー内の項目の項目識別子リスト (PIDL) へのポインターを列挙するために使用される標準的なメソッドのセットを公開します。
解説(Remarks)
すべての Shell フォルダー オブジェクトは、IEnumIDList をエクスポートする列挙オブジェクトを作成することで、IShellFolder::EnumObjects メソッドの呼び出しに応答できる必要があります。特に Shell は、これらのオブジェクトを使用してフォルダー内の項目を列挙します。
このインターフェイスを使用して、Shell フォルダー オブジェクトの内容を列挙します。フォルダーの IShellFolder::EnumObjects メソッドを呼び出し、返された IEnumIDList ポインターを使用して、フォルダー内の項目の PIDL を列挙します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
列挙シーケンス内の指定された数の項目識別子を取得し、取得した項目の数だけ現在の位置を進めます。
| celt | DWORD | in | rgelt パラメーターによって参照される配列内の要素の数。 |
| rgelt | ITEMIDLIST** | out | 項目識別子を受け取る ITEMIDLIST ポインターの配列へのポインターのアドレス。実装では、CoTaskMemAlloc を使用してこれらの項目識別子を割り当てる必要があります。呼び出し側のアプリケーションは、CoTaskMemFree を使用して項目識別子を解放する責任があります。 配列内で返される ITEMIDLIST 構造体は、列挙されている IShellFolder を基準とした相対的なものです。 |
| pceltFetched | DWORD* | outoptional | rgelt で実際に返された項目識別子の数を受け取る値へのポインター。この数は、celt パラメーターで指定された値よりも小さい場合があります。このパラメーターは、celt = 1 の場合にのみ、エントリー時に NULL にすることができます。これは、その場合、メソッドが 1 つ (S_OK) または 0 個 (S_FALSE) の項目のみを取得できるためです。 |
戻り値
型: HRESULT
メソッドが要求された celt 個の要素を正常に取得した場合は S_OK を返します。このメソッドは、要求された項目の完全な数が正常に取得された場合にのみ S_OK を返します。
S_FALSE は、列挙に残っていた項目よりも多くの項目が要求されたことを示します。pceltFetched パラメーターが指す値は、実際に取得された項目の数を指定します。取得する項目がこれ以上ない場合、値は 0 になることに注意してください。
それ以外の場合は、COM で定義されたエラー値を返します。
解説(Remarks)
このメソッドが Component Object Model (COM) エラー コード (FAILED マクロによって判定される) を返す場合、終了時に rgelt 配列内のエントリーはいずれも有効ではありません。このメソッドが成功コード (S_OK や S_FALSE など) を返す場合、pceltFetched パラメーターが指す ULONG によって、終了時に rgelt 配列内のいくつのエントリーが有効かが決まります。
この区別は、celt > 1 の場合に重要です。たとえば、celt=10 を渡し、残りの要素が 3 つしかない場合、*pceltFetched は 3 となり、メソッドはファイルの末尾に達したことを意味する S_FALSE を返します。取得された 3 つの要素は rgelt に格納され、有効です。
列挙シーケンス内の指定された数の要素をスキップします。
| celt | DWORD | in | スキップする項目識別子の数。 |
戻り値
型: HRESULT
成功した場合は S_OK を返し、それ以外の場合は COM で定義されたエラー値を返します。
列挙シーケンスの先頭に戻ります。
戻り値
型: HRESULT
成功した場合は S_OK を返し、それ以外の場合は COM で定義されたエラー値を返します。
現在のものと同じ内容および状態を持つ新しい項目列挙オブジェクトを作成します。(IEnumIDList.Clone)
| ppenum | IEnumIDList** | out | 新しい列挙オブジェクトへのポインターのアドレス。呼び出し側のアプリケーションは、最終的に新しいオブジェクトの Release メンバー関数を呼び出して、そのオブジェクトを解放する必要があります。 |
戻り値
型: HRESULT
成功した場合は S_OK を返し、それ以外の場合は COM で定義されたエラー値を返します。
解説(Remarks)
このメソッドを使用すると、列挙シーケンス内の特定のポイントを記録し、後でそのポイントに戻ることが可能になります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IEnumIDList "{000214F2-0000-0000-C000-000000000046}" #usecom global IEnumIDList IID_IEnumIDList "{}" #comfunc global IEnumIDList_Next 3 int,var,var #comfunc global IEnumIDList_Skip 4 int #comfunc global IEnumIDList_Reset 5 #comfunc global IEnumIDList_Clone 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IEnumIDList "{000214F2-0000-0000-C000-000000000046}" #usecom global IEnumIDList IID_IEnumIDList "{}" #comfunc global IEnumIDList_Next 3 int,sptr,sptr #comfunc global IEnumIDList_Skip 4 int #comfunc global IEnumIDList_Reset 5 #comfunc global IEnumIDList_Clone 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。