IPortableDeviceContent2
COM公式ドキュメント
デバイス上のコンテンツにアクセスするための追加メソッドを定義します。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
デバイス上のプロパティとデータを使用してオブジェクトを更新します。
| pszObjectID | LPWSTR | in | 更新するオブジェクトの識別子。 |
| pProperties | IPortableDeviceValues* | in | 更新するオブジェクトのプロパティを指定する IPortableDeviceValues インターフェイス。 |
| ppData | IStream** | out | オブジェクトのデータをデバイスへ送信するための IStream インターフェイス。 |
| pdwOptimalWriteBufferSize | DWORD* | inout | ppData にオブジェクトのデータを書き込む際の最適なバッファーサイズ。バッファーサイズを無視する場合は NULL を指定します。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の HRESULT 値は呼び出しが失敗したことを示します。
解説(Remarks)
デバイスの形式やオブジェクトの形式によっては、オブジェクトのプロパティの一部をデータそのものから導き出せる場合があります。あるいは、データに依存するプロパティ値を持つ場合もあります。たとえば、音楽トラックには再生時間 (duration) のプロパティがあり、これはアプリケーションが IPortableDeviceContent::CreateObjectWithPropertiesAndData メソッドを呼び出すときに指定されます。このトラックが既定のリソース (WPD_RESOURCE_DEFAULT) として格納されている場合、アプリケーションはそれを更新することがあります。その際、アプリケーションは再生時間のプロパティも併せて更新する必要が生じることがあります。このメソッドを使用すると、アプリケーションは両方の更新を同時に実行できます。
更新は、ppData パラメーターが参照するオブジェクトに対して IStream::Commit メソッドが呼び出されるまで完了しません。
進行中のデータ転送を中止するには、アプリケーションは ppData パラメーターが参照するオブジェクトに対して IStream::Revert メソッドを呼び出してください。
ppData パラメーターが参照する IStream インターフェイスのオブジェクトは、更新操作が完了した後、またはキャンセルされた後に解放する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPortableDeviceContent2 "{9B4ADD96-F6BF-4034-8708-ECA72BF10554}" #usecom global IPortableDeviceContent2 IID_IPortableDeviceContent2 "{}" #comfunc global IPortableDeviceContent2_UpdateObjectWithPropertiesAndData 13 wstr,sptr,sptr,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IPortableDeviceContent2 "{9B4ADD96-F6BF-4034-8708-ECA72BF10554}" #usecom global IPortableDeviceContent2 IID_IPortableDeviceContent2 "{}" #comfunc global IPortableDeviceContent2_UpdateObjectWithPropertiesAndData 13 wstr,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。