IWiaPropertyStorage
COM公式ドキュメント
IWiaPropertyStorage インターフェイスは、IWiaItem オブジェクトのプロパティに関する情報にアクセスするために使用します。アプリケーションは、IWiaPropertyStorage インターフェイスを取得するためにアイテムに対してクエリを行う必要があります。
解説(Remarks)
IWiaPropertyStorage インターフェイスには、次の IPropertyStorage インターフェイスのメソッドと非常によく似たメソッドがいくつか含まれています。これらのメソッドの IPropertyStorage 版に関する説明および解説は、IWiaPropertyStorage にもそのまま当てはまります。
| IPropertyStorage のメソッド | 説明 |
|---|---|
| IPropertyStorage::ReadMultiple | プロパティセット内のプロパティ値を読み取ります。 |
| IPropertyStorage::WriteMultiple | プロパティセット内のプロパティ値を書き込みます。 |
| IPropertyStorage::DeleteMultiple | プロパティセット内のプロパティを削除します。 |
| IPropertyStorage::ReadPropertyNames | 指定したプロパティ識別子に対応する文字列名を取得します。 |
| IPropertyStorage::WritePropertyNames | 指定したプロパティ識別子に対応する文字列名を作成または変更します。 |
| IPropertyStorage::DeletePropertyNames | 指定したプロパティ識別子の文字列名を削除します。 |
| IPropertyStorage::SetClass | プロパティセットに CLSID を割り当てます。 |
| IPropertyStorage::Commit | IStorage::Commit と同様に、プロパティストレージオブジェクトへの変更をフラッシュまたはコミットします。 |
| IPropertyStorage::Revert | プロパティストレージがトランザクションモードで開かれている場合に、最後のコミット以降のすべての変更を破棄します。 |
| IPropertyStorage::Enum | このセット内のプロパティを列挙する列挙子を作成し、そのポインターを取得します。 |
| IPropertyStorage::Stat | このプロパティセットに関する統計情報を受け取ります。 |
| IPropertyStorage::SetTimes | プロパティセットの変更日時、作成日時、アクセス日時を設定します。 |
IWiaPropertyStorage インターフェイスは、すべての Component Object Model (COM) インターフェイスと同様に、IUnknown インターフェイスのメソッドを継承します。
| IUnknown のメソッド | 説明 |
|---|---|
| IUnknown::QueryInterface | サポートされているインターフェイスへのポインターを返します。 |
| IUnknown::AddRef | 参照カウントをインクリメントします。 |
| IUnknown::Release | 参照カウントをデクリメントします。 |
メソッド 16
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
| cpspec | DWORD | in | 読み取るプロパティ数。 |
| rgpspec | PROPSPEC* | in | 読み取り対象を指定するPROPSPEC配列へのポインタ。 |
| rgpropvar | PROPVARIANT* | out | 読み取った値を受け取るPROPVARIANT配列へのポインタ。 |
| cpspec | DWORD | in | 書き込むプロパティ数。 |
| rgpspec | PROPSPEC* | in | 書き込み対象を指定するPROPSPEC配列へのポインタ。 |
| rgpropvar | PROPVARIANT* | in | 書き込む値を格納したPROPVARIANT配列へのポインタ。 |
| propidNameFirst | DWORD | in | 名前で新規追加時に割り当てる最小プロパティID。 |
| cpspec | DWORD | in | 削除するプロパティ数。 |
| rgpspec | PROPSPEC* | in | 削除対象を指定するPROPSPEC配列へのポインタ。 |
| cpropid | DWORD | in | 名前を取得するプロパティ数。 |
| rgpropid | DWORD* | in | 対象プロパティIDの配列へのポインタ。 |
| rglpwstrName | LPWSTR* | out | 取得した各プロパティ名を受け取る文字列配列へのポインタ。 |
| cpropid | DWORD | in | 名前を設定するプロパティ数。 |
| rgpropid | DWORD* | in | 対象プロパティIDの配列へのポインタ。 |
| rglpwstrName | LPWSTR* | in | 設定する各プロパティ名を格納した文字列配列へのポインタ。 |
| cpropid | DWORD | in | 名前を削除するプロパティ数。 |
| rgpropid | DWORD* | in | 削除対象プロパティIDの配列へのポインタ。 |
| grfCommitFlags | DWORD | in | 確定方法を示すフラグ。STGC_DEFAULT等を指定する。 |
| ppenum | IEnumSTATPROPSTG** | out | プロパティ統計情報の列挙子IEnumSTATPROPSTGを受け取る出力ポインタ。 |
| pctime | FILETIME* | in | 設定する作成日時を示すFILETIMEへのポインタ。NULL可。 |
| patime | FILETIME* | in | 設定する最終アクセス日時を示すFILETIMEへのポインタ。NULL可。 |
| pmtime | FILETIME* | in | 設定する最終更新日時を示すFILETIMEへのポインタ。NULL可。 |
| clsid | GUID* | in | プロパティセットに割り当てるクラスIDのGUIDへのポインタ。 |
| pstatpsstg | STATPROPSETSTG* | out | プロパティセットの統計情報を受け取るSTATPROPSETSTG構造体へのポインタ。 |
IWiaPropertyStorage::GetPropertyAttributes メソッドは、指定した一連のプロパティについて、アクセス権と有効値の情報を取得します。
| cpspec | DWORD | in | クエリするプロパティ属性の数を指定します。 |
| rgpspec | PROPSPEC* | in | デバイス情報プロパティ定数の配列を指定します。配列内の各定数が、クエリ対象のプロパティを選択します。 |
| rgflags | DWORD* | out | rgpspec 配列で指定した各プロパティのプロパティ属性記述子を受け取る配列です。配列の各要素は、1 つ以上の記述子値をビットごとの OR 演算で組み合わせた値になります。 |
| rgpropvar | PROPVARIANT* | out | pPROPSPEC 配列で指定した各プロパティのプロパティ属性記述子を受け取る配列です。詳細については、PROPVARIANT を参照してください。 |
戻り値
型: HRESULT
このメソッドは、次のいずれかの値または標準の COM エラーコードを返します。
| 戻り値 | 意味 |
|---|---|
| S_OK | メソッドは成功しました。 |
| S_FALSE | 指定されたプロパティ名は存在しません。属性は取得されませんでした。 |
| STG_E_ACCESSDENIED | アプリケーションにプロパティストリームへのアクセス権がないか、ストリームが既に開かれている可能性があります。 |
| STG_E_INSUFFICIENTMEMORY | 操作を完了するためのメモリが不足しています。 |
| ERROR_NOT_SUPPORTED | このプロパティ型はサポートされていません。 |
| STG_E_INVALIDPARAMETER | 1 つ以上のパラメーターが無効です。1 つ以上の PROPSPEC 構造体に無効なデータが含まれています。 |
| STG_E_INVALIDPOINTER | このメソッドに渡されたポインターのうち 1 つ以上が無効です。 |
| ERROR_NO_UNICODE_TRANSLATION | Unicode から ANSI、または ANSI から Unicode への変換に失敗しました。 |
解説(Remarks)
このメソッドは、プロパティのアクセス権と有効なプロパティ値の両方を取得します。アクセス権は、そのプロパティが読み取り可能か、書き込み可能か、あるいはその両方かを示します。有効なプロパティ値は、値の範囲、値のリスト、またはフラグ値のグループとして指定されます。詳細については、Property Attributes を参照してください。
プロパティのアクセス権フラグに WIA_PROP_NONE ビットが設定されている場合、そのプロパティには有効値の情報はありません。読み取り専用のプロパティや、バイナリデータ型のプロパティが、WIA_PROP_NONE ビットが設定されるプロパティの例です。
プロパティが有効値の範囲を持つ場合、このメソッドの完了後に rgpropvar パラメーターから範囲を判別できます。ppvValidValues パラメーターは、PROPVARIANT 構造体の配列を指定します。
たとえば、プロパティの範囲が VT_VECTOR | VT_UI4 として指定されている場合、範囲情報は次の構造体メンバーから取得できます。
rgpropvar[n].caul.pElems[range_specifier]
ここで n は調査対象のプロパティのインデックス番号、range_specifier は次のいずれかです。
| 範囲指定子 | 意味 |
|---|---|
| WIA_RANGE_MAX | プロパティに設定できる最大値。 |
| WIA_RANGE_MIN | プロパティに設定できる最小値。 |
| WIA_RANGE_NOM | プロパティの標準値または既定値。 |
| WIA_RANGE_STEP | プロパティ値の増減の刻み幅。 |
プロパティが有効値のリストを持つ場合、アプリケーションはこのメソッドの完了後に ppvValidValues パラメーターからそれらを判別します。
たとえば、プロパティの範囲が VT_VECTOR | VT_UI4 として指定されている場合、有効なプロパティ値のリストは次の構造体メンバーから取得できます。
rgpropspecValues[n].caul.pElems[list_specifier]
ここで n は調査対象のプロパティのインデックス番号、list_specifier は次のいずれかです。
| 範囲指定子 | 意味 |
|---|---|
| WIA_LIST_COUNT | 標準値を除いたリスト要素の総数。 |
| WIA_LIST_NOM | プロパティの標準値。 |
| WIA_LIST_VALUES | 最初の値のインデックス番号。 |
プログラムは、有効なフラグ値の取得にも ppvValidValues パラメーターを使用します。たとえば、プロパティのフラグが VT_UI4 として指定されている場合、有効なフラグ値は次の構造体メンバーから判別できます。
rgpropspec[n].caul.pElems[flag_specifier]
ここで n は調査対象のプロパティのインデックス番号、flag_specifier は次のいずれかです。
| 範囲指定子 | 意味 |
|---|---|
| WIA_FLAG_NOM | プロパティの標準値。 |
| WIA_FLAG_NUM_ELEMS | 標準値を除いたリスト要素の総数。 |
| WIA_FLAG_VALUES | 有効なフラグビットがすべて設定された値。 |
IWiaPropertyStorage::GetCount メソッドは、プロパティストレージに格納されているプロパティの数を返します。
| pulNumProps | DWORD* | out | プロパティストレージに格納されているプロパティの数を受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
IWiaPropertyStorage::GetPropertyStream メソッドは、アイテムのプロパティストリームを取得します。
| pCompatibilityId | GUID* | out | 一連のプロパティ値に対する一意の識別子を受け取ります。 |
| ppIStream | IStream** | out | アイテムのプロパティを受け取るストリームへのポインターです。詳細については、IStream を参照してください。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
アプリケーションは、このメソッドを使用してアイテムの現在のプロパティのスナップショットを取得します。取得したスナップショットは、後で IWiaPropertyStorage::SetPropertyStream を呼び出すことで復元できます。
アプリケーションは、pCompatibilityID パラメーターを使用して、特定の一連のプロパティ値をデバイスに書き込む前に、デバイスがそれらをサポートしているかどうかを確認できます。
アイテムのプロパティストリームの使用が終わったら、アプリケーションはそれを解放する必要があります。
IWiaPropertyStorage::SetPropertyStream は、Windows Image Acquisition (WIA) ハードウェアデバイスの IWiaItem オブジェクトのツリー内にあるアイテムのプロパティストリームを設定します。
| pCompatibilityId | GUID* | inout | 一連のプロパティ値に対する一意の識別子を指定します。 |
| pIStream | IStream* | in | 現在のアイテムのプロパティストリームを設定するために使用するプロパティストリームへのポインターです。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
アプリケーションは、pCompatibilityID パラメーターを使用して、特定の一連のプロパティ値をデバイスに書き込む前に、デバイスがそれらをサポートしているかどうかを確認します。
デバイスドライバーが pCompatibilityID で指定した CompatibilityID を受け入れるかどうかを確認するには、pIStream に NULL を設定します。
アプリケーションが IWiaPropertyStorage::GetPropertyStream メソッドでアイテムのプロパティストリームを取得した場合は、それを解放する必要があります。詳細については、IStream を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWiaPropertyStorage "{98B5E8A0-29CC-491A-AAC0-E6DB4FDCCEB6}" #usecom global IWiaPropertyStorage IID_IWiaPropertyStorage "{}" #comfunc global IWiaPropertyStorage_ReadMultiple 3 int,var,var #comfunc global IWiaPropertyStorage_WriteMultiple 4 int,var,var,int #comfunc global IWiaPropertyStorage_DeleteMultiple 5 int,var #comfunc global IWiaPropertyStorage_ReadPropertyNames 6 int,var,var #comfunc global IWiaPropertyStorage_WritePropertyNames 7 int,var,var #comfunc global IWiaPropertyStorage_DeletePropertyNames 8 int,var #comfunc global IWiaPropertyStorage_Commit 9 int #comfunc global IWiaPropertyStorage_Revert 10 #comfunc global IWiaPropertyStorage_Enum 11 sptr #comfunc global IWiaPropertyStorage_SetTimes 12 var,var,var #comfunc global IWiaPropertyStorage_SetClass 13 var #comfunc global IWiaPropertyStorage_Stat 14 var #comfunc global IWiaPropertyStorage_GetPropertyAttributes 15 int,var,var,var #comfunc global IWiaPropertyStorage_GetCount 16 var #comfunc global IWiaPropertyStorage_GetPropertyStream 17 var,sptr #comfunc global IWiaPropertyStorage_SetPropertyStream 18 var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IWiaPropertyStorage "{98B5E8A0-29CC-491A-AAC0-E6DB4FDCCEB6}" #usecom global IWiaPropertyStorage IID_IWiaPropertyStorage "{}" #comfunc global IWiaPropertyStorage_ReadMultiple 3 int,sptr,sptr #comfunc global IWiaPropertyStorage_WriteMultiple 4 int,sptr,sptr,int #comfunc global IWiaPropertyStorage_DeleteMultiple 5 int,sptr #comfunc global IWiaPropertyStorage_ReadPropertyNames 6 int,sptr,sptr #comfunc global IWiaPropertyStorage_WritePropertyNames 7 int,sptr,sptr #comfunc global IWiaPropertyStorage_DeletePropertyNames 8 int,sptr #comfunc global IWiaPropertyStorage_Commit 9 int #comfunc global IWiaPropertyStorage_Revert 10 #comfunc global IWiaPropertyStorage_Enum 11 sptr #comfunc global IWiaPropertyStorage_SetTimes 12 sptr,sptr,sptr #comfunc global IWiaPropertyStorage_SetClass 13 sptr #comfunc global IWiaPropertyStorage_Stat 14 sptr #comfunc global IWiaPropertyStorage_GetPropertyAttributes 15 int,sptr,sptr,sptr #comfunc global IWiaPropertyStorage_GetCount 16 sptr #comfunc global IWiaPropertyStorage_GetPropertyStream 17 sptr,sptr #comfunc global IWiaPropertyStorage_SetPropertyStream 18 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。