IProviderProperties
COM公式ドキュメント
ディスカバリープロバイダーが独自のプロパティストアを直接作成および管理するために、オプションで実装するインターフェイスです。
解説(Remarks)
このインターフェイスを実装すると、プロバイダーは最新のプロパティ値へのアクセスを提供できます。実装しない場合、クライアントは、関数インスタンスの作成時またはプロパティストアのオープン時に Function Discovery が作成したキャッシュ内の値を使用します。
プロバイダーがこのインターフェイスを実装しない場合、プロバイダーはインスタンスの作成時、またはクライアントが InstancePropertyStoreOpen を呼び出したときにプロパティストアを提供する必要があります。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
プロパティストア内のプロパティの数を取得します。
| pIFunctionInstance | IFunctionInstance* | in | IFunctionInstance インターフェイスへのポインターです。 |
| iProviderInstanceContext | INT_PTR | in | 特定の関数インスタンスに関連付けられたコンテキストです。 |
| pdwCount | DWORD* | out | プロパティストア内のプロパティの数です。 |
戻り値
戻り値には、以下のものが含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| いずれかのパラメーターに無効な引数が含まれています。 | |
| pdwCount パラメーターが NULL です。 |
指定したインデックスのプロパティキーを取得します。
| pIFunctionInstance | IFunctionInstance* | in | IFunctionInstance インターフェイスへのポインターです。 |
| iProviderInstanceContext | INT_PTR | in | 特定の関数インスタンスに関連付けられたコンテキストです。 |
| dwIndex | DWORD | in | プロパティキーのインデックスです。 |
| pKey | PROPERTYKEY* | out | プロパティキーです。 |
戻り値
戻り値には、以下のものが含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| 入力パラメーターのいずれかが無効です。 | |
| pKey パラメーターが NULL です。 |
指定したプロパティキーの値を取得します。
| pIFunctionInstance | IFunctionInstance* | in | IFunctionInstance インターフェイスへのポインターです。 |
| iProviderInstanceContext | INT_PTR | in | 特定の関数インスタンスに関連付けられたコンテキストです。 |
| Key | PROPERTYKEY* | in | プロパティキーの参照です。 |
| ppropVar | PROPVARIANT* | out | Key で指定されたプロパティキーの値です。キーがプロパティストア内に見つからない場合、PROPVARIANT の型は VT_EMPTY になります。 |
戻り値
戻り値には、以下のものが含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| いずれかのパラメーターに無効な引数が含まれています。 | |
| ppropVar パラメーターが NULL です。 | |
| メソッドは操作を実行するために十分なメモリを割り当てることができません。 |
解説(Remarks)
プロパティキーの値を変更するには、SetValue メソッドを使用します。
Key に対応する値が見つからなかった場合、戻り値は S_OK となり、ppropVar には VT_NULL が設定されます。
指定したプロパティキーの値を設定します。
| pIFunctionInstance | IFunctionInstance* | in | IFunctionInstance インターフェイスです。 |
| iProviderInstanceContext | INT_PTR | in | 特定の関数インスタンスに関連付けられたコンテキストです。 |
| Key | PROPERTYKEY* | in | 設定するプロパティのプロパティキーです。 |
| ppropVar | PROPVARIANT* | in | プロパティデータです。プロパティをストアから削除するには、型が VT_EMPTY の PROPVARIANT を指定します。 |
戻り値
戻り値には、以下のものが含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| pIFunctionInstance、pvProviderInstanceContext、または ppropVar パラメーターが NULL です。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IProviderProperties "{CF986EA6-3B5F-4C5F-B88A-2F8B20CEEF17}" #usecom global IProviderProperties IID_IProviderProperties "{}" #comfunc global IProviderProperties_GetCount 3 sptr,sptr,var #comfunc global IProviderProperties_GetAt 4 sptr,sptr,int,var #comfunc global IProviderProperties_GetValue 5 sptr,sptr,var,var #comfunc global IProviderProperties_SetValue 6 sptr,sptr,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IProviderProperties "{CF986EA6-3B5F-4C5F-B88A-2F8B20CEEF17}" #usecom global IProviderProperties IID_IProviderProperties "{}" #comfunc global IProviderProperties_GetCount 3 sptr,sptr,sptr #comfunc global IProviderProperties_GetAt 4 sptr,sptr,int,sptr #comfunc global IProviderProperties_GetValue 5 sptr,sptr,sptr,sptr #comfunc global IProviderProperties_SetValue 6 sptr,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。