IPropertyChangeArray
COM公式ドキュメント
IFileOperation に渡すことができる、複数の変更操作をまとめて扱うためのメソッドを公開します。
解説(Remarks)
このインターフェイスの標準実装を取得するには、クラス識別子 (CLSID) CLSID_PropertyChangeArray を指定して CoCreateInstance を呼び出すか、PSCreatePropertyChangeArray を呼び出します。これは、単一のファイル操作に複数の変更をまとめて渡し、ファイルへの複数回のアクセスを防ぐためのコンテナー インターフェイスです。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
配列内の変更操作の数を取得します。
| pcOperations | DWORD* | out | 変更操作の数へのポインター。 |
戻り値
型: HRESULT
常に S_OK を返します。
指定した配列インデックスにある変更操作を取得します。
| iIndex | DWORD | in | 取得する変更のインデックス。 |
| riid | GUID* | in | 目的の IID への参照。 |
| ppv | void** | out | riid で指定したインターフェイスへのポインターのアドレス。通常は IPropertyChange です。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
指定した位置に変更操作を配列に挿入します。
| iIndex | DWORD | in | 変更を挿入するインデックス。 |
| ppropChange | IPropertyChange* | in | 変更を格納するインターフェイスへのポインター。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
配列の末尾に変更操作を挿入します。
| ppropChange | IPropertyChange* | in | 変更を格納するインターフェイスへのポインター。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
指定した変更と同じプロパティ キーに影響する変更の最初の出現を置き換えます。そのプロパティ キーがまだ配列内に存在しない場合、このメソッドはその変更を配列の末尾に追加します。
| ppropChange | IPropertyChange* | in | 変更を格納するインターフェイスへのポインター。 |
戻り値
型: HRESULT
成功した場合は S_OK を返し、それ以外の場合はエラー値を返します。
指定した変更を削除します。
| iIndex | DWORD | in | 削除する変更のインデックス。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
特定のプロパティ キーが変更配列内に存在するかどうかを指定します。
| key | PROPERTYKEY* | in | 対象となる PROPERTYKEY 構造体への参照。 |
戻り値
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPropertyChangeArray "{380F5CAD-1B5E-42F2-805D-637FD392D31E}" #usecom global IPropertyChangeArray IID_IPropertyChangeArray "{}" #comfunc global IPropertyChangeArray_GetCount 3 var #comfunc global IPropertyChangeArray_GetAt 4 int,var,sptr #comfunc global IPropertyChangeArray_InsertAt 5 int,sptr #comfunc global IPropertyChangeArray_Append 6 sptr #comfunc global IPropertyChangeArray_AppendOrReplace 7 sptr #comfunc global IPropertyChangeArray_RemoveAt 8 int #comfunc global IPropertyChangeArray_IsKeyInArray 9 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IPropertyChangeArray "{380F5CAD-1B5E-42F2-805D-637FD392D31E}" #usecom global IPropertyChangeArray IID_IPropertyChangeArray "{}" #comfunc global IPropertyChangeArray_GetCount 3 sptr #comfunc global IPropertyChangeArray_GetAt 4 int,sptr,sptr #comfunc global IPropertyChangeArray_InsertAt 5 int,sptr #comfunc global IPropertyChangeArray_Append 6 sptr #comfunc global IPropertyChangeArray_AppendOrReplace 7 sptr #comfunc global IPropertyChangeArray_RemoveAt 8 int #comfunc global IPropertyChangeArray_IsKeyInArray 9 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。