IFunctionDiscoveryProviderFactory
COM公式ドキュメント
Function Discovery オブジェクトを作成するためのファクトリメソッドを提供します。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
プロバイダーがメモリ内プロパティストアの実装を再利用できるようにします。
| ppIPropertyStore | IPropertyStore** | out | IPropertyStore インターフェイスポインターへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
プロバイダーがプロパティをキャッシュしたい場合は、関数インスタンスの作成時、またはプロパティストアが最初に開かれたときのいずれかで、このメソッドを使用してメモリ内プロパティストアを作成し、必要に応じてプロパティを設定した上で、作成時には CreateInstance を使用して関数インスタンスに割り当てるか、プロパティストアが最初に開かれたときには InstancePropertyStoreOpen を使用して割り当てることができます。
関数インスタンスを作成します。
| pszSubCategory | LPWSTR | in | 関数インスタンスのサブカテゴリ文字列。Subcategory Definitions を参照してください。 |
| pszProviderInstanceIdentity | LPWSTR | in | プロバイダーインスタンスの識別子。 Function Discovery はこの識別子を使用して、IFunctionInstance::GetID が返す関数インスタンス識別子が一意になることを保証します。そのために、Function Discovery は pszProviderInstanceIdentity に渡された識別子にプレフィックスを付加し、特定の関数インスタンス識別子がすべてのプロバイダーにわたって一意になるようにします。実装者は、pszProviderInstanceIdentity がプロバイダーのスコープ内でデバイス、リソース、またはインスタンスを一意に識別することのみを保証すればよいです。 この文字列は、IFunctionInstance::GetProviderInstanceID を呼び出すクライアントアプリケーションに返されます。 この文字列のサイズに上限はありません。 |
| iProviderInstanceContext | INT_PTR | in | 特定の関数インスタンスに関連付けられたコンテキスト。 |
| pIPropertyStore | IPropertyStore* | in | IPropertyStore インターフェイスへのポインター。 |
| pIFunctionDiscoveryProvider | IFunctionDiscoveryProvider* | in | この関数インスタンスを作成する IFunctionDiscoveryProvider プロバイダーインスタンスへのポインター。 |
| ppIFunctionInstance | IFunctionInstance** | out | IFunctionInstance インターフェイスへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
プロバイダーは、サブカテゴリ(NULL でも可)、インスタンス識別子、プロバイダーが割り当てたコンテキスト(必要な場合)、およびオプションのプロパティストアを指定する必要があります。
CreateInstance は、適切に初期化された関数インスタンスをプロバイダーに返します。
プロバイダーが指定したコンテキストは、InstanceReleased、InstancePropertyStoreOpen、InstancePropertyStoreFlush、InstanceQueryService など、以降のすべての関数インスタンス関連メソッドでプロバイダーに渡されます。
プロバイダーは、CreateInstance の呼び出し中に、場合によっては別のスレッドで、プロバイダーの参照カウントがゼロにならないことを保証する必要があります。
関数インスタンスコレクションを作成します。
| ppIFunctionInstanceCollection | IFunctionInstanceCollection** | out | IFunctionInstanceCollection インターフェイスポインターへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
返される可能性のある値には、以下のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| ppIFunctionInstanceCollection の値が無効です。 | |
| この操作を実行するために必要なメモリを割り当てることができません。 |
解説(Remarks)
IFunctionDiscoveryProvider::Query メソッドの ppIFunctionInstanceCollection パラメーターを通じて結果を同期的に返すプロバイダーは、これを使用して結果を返すためのコレクションを作成できます。
Function Discovery インスタンスコレクションオブジェクトは CoCreateInstance を使用して作成することもできるため、クライアントプログラマーはこれを作成して使用できます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IFunctionDiscoveryProviderFactory "{86443FF0-1AD5-4E68-A45A-40C2C329DE3B}"
#usecom global IFunctionDiscoveryProviderFactory IID_IFunctionDiscoveryProviderFactory "{}"
#comfunc global IFunctionDiscoveryProviderFactory_CreatePropertyStore 3 sptr
#comfunc global IFunctionDiscoveryProviderFactory_CreateInstance 4 wstr,wstr,sptr,sptr,sptr,sptr
#comfunc global IFunctionDiscoveryProviderFactory_CreateFunctionInstanceCollection 5 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。