IOleCache2
COM公式ドキュメント
オブジェクトのクライアントが、IOleCache::Cache で作成された各キャッシュを個別に更新できるようにします。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定されたキャッシュを更新します。このメソッドは、アプリケーションがキャッシュを厳密に制御する必要がある場合に使用します。
| pDataObject | IDataObject* | in | キャッシュの更新元となるデータオブジェクト上の IDataObject インターフェイスへのポインター。オブジェクトハンドラーおよびインプロセスサーバーは、通常、NULL 以外の値を渡します。コンテナーアプリケーションは通常 NULL を渡し、ソースは現在実行中のオブジェクトから取得されます。 | ||||||||||||||||||||
| grfUpdf | UPDFCACHE_FLAGS | in | 更新するキャッシュの種類。このパラメーターには、次の値のうち 1 つ以上を指定できます。
| ||||||||||||||||||||
| pReserved | void* | optional | このパラメーターは予約されており、NULL でなければなりません。 |
戻り値
このメソッドは、成功した場合に S_OK を返します。その他に返される可能性のある値は次のとおりです。
| リターンコード | 説明 |
|---|---|
| 引数のいずれかが無効です。 | |
| 予期しないエラーが発生しました。 | |
| この操作に使用できるメモリが不足しています。 | |
| 指定された pDataObject が実行されていません。 | |
| いずれのキャッシュも更新されませんでした。 | |
| 一部のキャッシュが更新されました。 |
メモリ内にあるキャッシュを破棄します。
| dwDiscardOptions | DWORD | in | データを破棄する前に保存するかどうかを示す DISCARDCACHE 列挙体の値。大きなオブジェクトを描画済みで、メモリを解放する必要があるコンテナーは、DISCARDCACHE_SAVEIFDIRTY を指定することで、次にオブジェクトを描画しなければならないときのために最新のプレゼンテーションを保存できます。 埋め込みオブジェクトをアクティブ化して何らかの変更を加えた後、変更をロールバックするために OLECLOSE_NOSAVE を指定して IOleObject::Close を呼び出したコンテナーは、DISCARDCACHE_NOSAVE を指定することで、ネイティブデータとプレゼンテーションデータが同期しなくなることを防止できます。 |
戻り値
このメソッドは、成功した場合に S_OK を返します。その他に返される可能性のある値は次のとおりです。
| リターンコード | 説明 |
|---|---|
| キャッシュ内のデータを保存するために利用できるストレージがありません。 | |
| ストレージメディアがいっぱいです。 |
解説(Remarks)
IOleCache2::DiscardCache メソッドは、プレゼンテーションキャッシュが現在使用しているメモリを解放することにより、メモリ不足の状態に対処するために一般的に使用されます。
破棄された後、キャッシュはディスクベースのデータに戻ることで、以降の IDataObject::GetData の呼び出しに応答します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IOleCache2 "{00000128-0000-0000-C000-000000000046}"
#usecom global IOleCache2 IID_IOleCache2 "{}"
#comfunc global IOleCache2_UpdateCache 8 sptr,int,sptr
#comfunc global IOleCache2_DiscardCache 9 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。