ISharedBitmap
COM公式ドキュメント
ビットマップにアクセスするためのメモリ効率の良いメソッドを公開します。このインターフェイスは HBITMAP オブジェクトの薄いラッパーとして使用され、それらのオブジェクトを参照カウント可能にし、基になるデータが変更されないよう保護します。
解説(Remarks)
このインターフェイスは IThumbnailCache のメソッドと組み合わせて使用されます。IThumbnailCache::GetThumbnail および IThumbnailCache::GetThumbnailByID が返すビットマップは ISharedBitmap 型です。
ISharedBitmap オブジェクトがサムネイル キャッシュから取得される場合、パフォーマンス向上のため、基になるビットマップは共有メモリに存在することがあります。
メモリ マップされたビットマップの基になるデータは、クライアントがアクセスしている間は保護されます。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ISharedBitmap オブジェクトに含まれるビットマップを取得します。
| phbm | HBITMAP* | out | ビットマップへのハンドルを指すポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
取得されるビットマップは共有メモリに存在する場合があります。
ISharedBitmap オブジェクトに含まれるビットマップのサイズを取得します。
| pSize | SIZE* | out | このメソッドが返るときに、含まれるビットマップのサイズ(ピクセル単位)を指定する値へのポインターが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
ビットマップ イメージのアルファ タイプを取得します。
| pat | WTS_ALPHATYPE* | out | このメソッドが返るときに、ビットマップ イメージのアルファ タイプへのポインターが格納されます。次のいずれかの値になります。 WTSAT_RGBビットマップには透過用のアルファ チャネルが含まれていません。 WTSAT_ARGBビットマップには透過用のアルファ チャネルが含まれています。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
指定されたビットマップで新しい ISharedBitmap オブジェクトを初期化します。
| hbm | HBITMAP | in | 新しい ISharedBitmap オブジェクトを初期化するためのビットマップへのハンドル。ビットマップは DIB でなければなりません。 |
| wtsAT | WTS_ALPHATYPE | in | ビットマップ イメージのアルファ タイプ。次のいずれかの値になります。 WTSAT_UNKNOWNビットマップにアルファ チャネルがあるかどうかを判別できません。 WTSAT_RGBビットマップには透過用のアルファ チャネルが含まれていません。 WTSAT_ARGBビットマップには透過用のアルファ チャネルが含まれています。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
ISharedBitmap オブジェクトが(IThumbnailCache::GetThumbnailByID や IThumbnailCache::GetThumbnail メソッドによって返されるのではなく)クライアントによってインスタンス化された場合、基になるビットマップは共有メモリに存在しません。
ISharedBitmap オブジェクトに含まれるビットマップを取得します。含まれるビットマップが共有メモリに存在する場合はコピーを返します。
| phbm | HBITMAP* | out | このメソッドが返るときに、取得するビットマップへのハンドルを指すポインターが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
取得されるビットマップが共有メモリに存在する場合は、ビットマップのコピーが返されます。Detach メソッドは、基になる共有メモリへの参照を解放しません。
取得されるビットマップが共有メモリに存在しない場合は、ビットマップ自体が返され、コピーは作成されません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISharedBitmap "{091162A4-BC96-411F-AAE8-C5122CD03363}" #usecom global ISharedBitmap IID_ISharedBitmap "{4DB26476-6787-4046-B836-E8412A9E8A27}" #comfunc global ISharedBitmap_GetSharedBitmap 3 sptr #comfunc global ISharedBitmap_GetSize 4 var #comfunc global ISharedBitmap_GetFormat 5 var #comfunc global ISharedBitmap_InitializeBitmap 6 sptr,int #comfunc global ISharedBitmap_Detach 7 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ISharedBitmap "{091162A4-BC96-411F-AAE8-C5122CD03363}" #usecom global ISharedBitmap IID_ISharedBitmap "{4DB26476-6787-4046-B836-E8412A9E8A27}" #comfunc global ISharedBitmap_GetSharedBitmap 3 sptr #comfunc global ISharedBitmap_GetSize 4 sptr #comfunc global ISharedBitmap_GetFormat 5 sptr #comfunc global ISharedBitmap_InitializeBitmap 6 sptr,int #comfunc global ISharedBitmap_Detach 7 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。