IPersistFolder3
COM公式ドキュメント
IPersistFolder および IPersistFolder2 インターフェースを拡張し、フォルダーオブジェクトがフォルダーショートカットの既定以外の処理を実装できるようにします。
解説(Remarks)
このインターフェースは、継承元である IPersist、IPersistFolder、および IPersistFolder2 の各インターフェースが備えるメソッドも提供します。
Windows Vista より前の Windows のバージョンでは、このインターフェースは Shlobj.h で宣言されていました。
実装するタイミング
名前空間拡張は、フォルダーショートカットの既定以外の処理を行う必要がある場合に、このインターフェースを実装します。使用するタイミング
アプリケーションが通常、このインターフェースを直接使用することはありません。メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
フォルダーを初期化し、名前空間内での位置を指定します。フォルダーがショートカットである場合、このメソッドはターゲットフォルダーの位置も指定します。
| pbc | IBindCtx* | in | バインドコンテキストを提供する IBindCtx オブジェクトへのポインター。このパラメーターは NULL にできます。 |
| pidlRoot | ITEMIDLIST* | in | フォルダーまたはフォルダーショートカットの絶対的な位置を指定する完全修飾 PIDL へのポインター。この PIDL の割り当てと解放は、呼び出し側のアプリケーションが行います。 |
| ppfti | PERSIST_FOLDER_TARGET_INFO* | in | ターゲットフォルダーの位置とその属性を指定する PERSIST_FOLDER_TARGET_INFO 構造体へのポインター。 ppfti が有効な構造体を指している場合、pidlRoot はフォルダーショートカットを表します。 ppfti が NULL に設定されている場合、pidlRoot は通常のフォルダーを表します。その場合、InitializeEx は Initialize が呼び出されたかのように動作する必要があります。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
この関数は IPersistFolder::Initialize の拡張版です。これにより、シェルは通常のフォルダーだけでなくフォルダーショートカットも初期化できます。
フォルダーショートカットのターゲットフォルダーの位置と属性を提供します。
| ppfti | PERSIST_FOLDER_TARGET_INFO* | out | ターゲットフォルダーの位置と属性を返すために使用される PERSIST_FOLDER_TARGET_INFO 構造体へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
PERSIST_FOLDER_TARGET_INFO 構造体は、呼び出し側によって初期化されていない場合があります。GetFolderTargetInfo は、呼び出し側に構造体を返す前に、そのすべてのメンバーに値を割り当てる必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPersistFolder3 "{CEF04FDF-FE72-11D2-87A5-00C04F6837CF}" #usecom global IPersistFolder3 IID_IPersistFolder3 "{}" #comfunc global IPersistFolder3_InitializeEx 6 sptr,var,var #comfunc global IPersistFolder3_GetFolderTargetInfo 7 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IPersistFolder3 "{CEF04FDF-FE72-11D2-87A5-00C04F6837CF}" #usecom global IPersistFolder3 IID_IPersistFolder3 "{}" #comfunc global IPersistFolder3_InitializeEx 6 sptr,sptr,sptr #comfunc global IPersistFolder3_GetFolderTargetInfo 7 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。