Win32 API 日本語リファレンス
ホームDevices.FunctionDiscovery › IFunctionDiscoveryProviderFactory

IFunctionDiscoveryProviderFactory

COM
IID86443ff0-1ad5-4e68-a45a-40c2c329de3b継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Function Discovery オブジェクトを作成するためのファクトリメソッドを提供します。

メソッド 3

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT CreatePropertyStore(IPropertyStore** ppIPropertyStore)

プロバイダーがメモリ内プロパティストアの実装を再利用できるようにします。

ppIPropertyStoreIPropertyStore**outIPropertyStore インターフェイスポインターへのポインター。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

プロバイダーがプロパティをキャッシュしたい場合は、関数インスタンスの作成時、またはプロパティストアが最初に開かれたときのいずれかで、このメソッドを使用してメモリ内プロパティストアを作成し、必要に応じてプロパティを設定した上で、作成時には CreateInstance を使用して関数インスタンスに割り当てるか、プロパティストアが最初に開かれたときには InstancePropertyStoreOpen を使用して割り当てることができます。

vtbl 4 HRESULT CreateInstance(LPWSTR pszSubCategory, LPWSTR pszProviderInstanceIdentity, INT_PTR iProviderInstanceContext, IPropertyStore* pIPropertyStore, IFunctionDiscoveryProvider* pIFunctionDiscoveryProvider, IFunctionInstance** ppIFunctionInstance)

関数インスタンスを作成します。

pszSubCategoryLPWSTRin関数インスタンスのサブカテゴリ文字列。Subcategory Definitions を参照してください。
pszProviderInstanceIdentityLPWSTRin

プロバイダーインスタンスの識別子。

Function Discovery はこの識別子を使用して、IFunctionInstance::GetID が返す関数インスタンス識別子が一意になることを保証します。そのために、Function Discovery は pszProviderInstanceIdentity に渡された識別子にプレフィックスを付加し、特定の関数インスタンス識別子がすべてのプロバイダーにわたって一意になるようにします。実装者は、pszProviderInstanceIdentity がプロバイダーのスコープ内でデバイス、リソース、またはインスタンスを一意に識別することのみを保証すればよいです。

この文字列は、IFunctionInstance::GetProviderInstanceID を呼び出すクライアントアプリケーションに返されます。

この文字列のサイズに上限はありません。

iProviderInstanceContextINT_PTRin特定の関数インスタンスに関連付けられたコンテキスト。
pIPropertyStoreIPropertyStore*inIPropertyStore インターフェイスへのポインター。
pIFunctionDiscoveryProviderIFunctionDiscoveryProvider*inこの関数インスタンスを作成する IFunctionDiscoveryProvider プロバイダーインスタンスへのポインター。
ppIFunctionInstanceIFunctionInstance**outIFunctionInstance インターフェイスへのポインター。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

プロバイダーは、サブカテゴリ(NULL でも可)、インスタンス識別子、プロバイダーが割り当てたコンテキスト(必要な場合)、およびオプションのプロパティストアを指定する必要があります。

CreateInstance は、適切に初期化された関数インスタンスをプロバイダーに返します。

プロバイダーが指定したコンテキストは、InstanceReleasedInstancePropertyStoreOpenInstancePropertyStoreFlushInstanceQueryService など、以降のすべての関数インスタンス関連メソッドでプロバイダーに渡されます。

プロバイダーは、CreateInstance の呼び出し中に、場合によっては別のスレッドで、プロバイダーの参照カウントがゼロにならないことを保証する必要があります。

vtbl 5 HRESULT CreateFunctionInstanceCollection(IFunctionInstanceCollection** ppIFunctionInstanceCollection)

関数インスタンスコレクションを作成します。

ppIFunctionInstanceCollectionIFunctionInstanceCollection**outIFunctionInstanceCollection インターフェイスポインターへのポインター。

戻り値

このメソッドは次のいずれかの値を返すことがあります。

返される可能性のある値には、以下のものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは正常に完了しました。
E_INVALIDARG
ppIFunctionInstanceCollection の値が無効です。
E_OUTOFMEMORY
この操作を実行するために必要なメモリを割り当てることができません。

解説(Remarks)

IFunctionDiscoveryProvider::Query メソッドの ppIFunctionInstanceCollection パラメーターを通じて結果を同期的に返すプロバイダーは、これを使用して結果を返すためのコレクションを作成できます。

Function Discovery インスタンスコレクションオブジェクトは CoCreateInstance を使用して作成することもできるため、クライアントプログラマーはこれを作成して使用できます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。