IFileSystemBindData
COM公式ドキュメント
IShellFolder::ParseDisplayName の呼び出しを最適化するために、ファイルシステム情報を格納するメソッドを公開します。
解説(Remarks)
IFileSystemBindData は、ファイルシステム情報を WIN32_FIND_DATA 構造体に格納します。IFileSystemBindData を実装するオブジェクトは、その後 IShellFolder::ParseDisplayName に渡されるバインドコンテキストに格納されます。
IShellFolder::ParseDisplayName の呼び出しを最適化したい場合で、WIN32_FIND_DATA 構造体のファイル情報がすでに利用可能な場合に、IFileSystemBindData を実装します。
IShellFolder::ParseDisplayName を呼び出す前に WIN32_FIND_DATA の情報を格納するには、クライアントは次の手順を使用します。
- IFileSystemBindData インターフェイスを公開するオブジェクトのインスタンスを作成します。
- IFileSystemBindData::SetFindData を使用して、データをオブジェクトに格納します。
- IBindCtx::RegisterObjectParam メソッドを使用して、オブジェクトをバインドコンテキストに格納します。pszKey パラメーターには文字列
L"File System Bind Data"を、punk パラメーターには IFileSystemBindData インターフェイスのアドレスを設定します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ファイルシステム情報を WIN32_FIND_DATA 構造体に格納します。この情報は ParseDisplayName によって使用されます。
| pfd | WIN32_FIND_DATAW* | in | 格納したいデータを指定する WIN32_FIND_DATA 構造体へのポインター。 |
戻り値
型: HRESULT
常に S_OK を返します。
解説(Remarks)
クライアントがファイル情報を格納した後、オブジェクト自体のインスタンスを、pszKey パラメーターに L"File System Bind Data" を設定した IBindCtx::RegisterObjectParam メソッドを使用してバインドコンテキストに格納する必要があります。
WIN32_FIND_DATA 構造体に格納されているファイルシステム情報を取得します。
| pfd | WIN32_FIND_DATAW* | out | データを受け取る WIN32_FIND_DATA 構造体へのポインター。 |
戻り値
型: HRESULT
S_OK を返します。
解説(Remarks)
このメソッドは、バインドコンテキスト情報を IShellFolder::ParseDisplayName に提供します。クライアントは、pszKey パラメーターに文字列 "File System Bind Data" を設定して IBindCtx::GetObjectParam を呼び出すことで、オブジェクトにアクセスします。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IFileSystemBindData "{01E18D10-4D8B-11D2-855D-006008059367}" #usecom global IFileSystemBindData IID_IFileSystemBindData "{}" #comfunc global IFileSystemBindData_SetFindData 3 var #comfunc global IFileSystemBindData_GetFindData 4 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IFileSystemBindData "{01E18D10-4D8B-11D2-855D-006008059367}" #usecom global IFileSystemBindData IID_IFileSystemBindData "{}" #comfunc global IFileSystemBindData_SetFindData 3 sptr #comfunc global IFileSystemBindData_GetFindData 4 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。