IParentAndItem
COM公式ドキュメント
親と親の子IDを取得および設定するメソッドを公開します。IParentAndItem は通常 IShellItem 上に実装されますが、IShellItem に固有のものではありません。
解説(Remarks)
このインターフェイスによるパフォーマンスの向上は、絶対アイテム識別子リストを使用するインターフェイスである IPersistIDList と比較すると顕著です。IPersistIDList を実装したオブジェクトに対する後続の操作では IShellFolder::BindToObject の呼び出しが必要になる場合があり、これらの呼び出しはパフォーマンスに影響を与えることがあります。IParentAndItem を実装した IShellItem および参加する IShellFolder の場合、親となる IShellFolder が既にキャッシュされている可能性があります。IParentAndItem を実装し、親となる IShellFolder を直接取得/設定することで、IShellFolder インターフェイスを取得するためにアイテム識別子リストに対して IShellFolder::BindToObject を呼び出す必要がなくなります。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
アイテムの親と親の子IDを設定します。
| pidlParent | ITEMIDLIST* | in | 親へのポインター。 |
| psf | IShellFolder* | in | 親である IShellFolder へのポインター。 |
| pidlChild | ITEMIDLIST* | in | psf を基準とした子となる PIDL。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
IParentAndItem は通常 IShellItem 上に実装されますが、IShellItem に固有のものではありません。
アイテムの親と親の子IDを取得します。
| ppidlParent | ITEMIDLIST** | outoptional | このメソッドが返るときに、親を指定する PIDL のアドレスが格納されます。 |
| ppsf | IShellFolder** | outoptional | このメソッドが返るときに、親である IShellFolder へのポインターのアドレスが格納されます。 |
| ppidlChild | ITEMIDLIST** | outoptional | このメソッドが返るときに、ppsf で指定されたものを基準として IParentAndItem オブジェクトを識別する子 PIDL のアドレスが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
IParentAndItem は通常 IShellItem 上に実装されますが、IShellItem に固有のものではありません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IParentAndItem "{B3A4B685-B685-4805-99D9-5DEAD2873236}" #usecom global IParentAndItem IID_IParentAndItem "{}" #comfunc global IParentAndItem_SetParentAndItem 3 var,sptr,var #comfunc global IParentAndItem_GetParentAndItem 4 var,sptr,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IParentAndItem "{B3A4B685-B685-4805-99D9-5DEAD2873236}" #usecom global IParentAndItem IID_IParentAndItem "{}" #comfunc global IParentAndItem_SetParentAndItem 3 sptr,sptr,sptr #comfunc global IParentAndItem_GetParentAndItem 4 sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。