IOleCacheControl
COM公式ドキュメント
キャッシュの適切な保守を提供します。実行中オブジェクトの IDataObject 実装をキャッシュに接続することでキャッシュを保守し、キャッシュが実行中オブジェクトから通知を受け取れるようにします。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
データソースオブジェクトが実行状態に移行したことをキャッシュに通知し、キャッシュオブジェクトが必要に応じてアドバイズシンクを確立できるようにします。
| pDataObject | IDataObject* | inoptional | 実行状態に移行するオブジェクト上の IDataObject インターフェイスへのポインター。 |
戻り値
このメソッドは、成功すると S_OK を返します。その他に返される可能性のある値には、次のものがあります。
| 戻り値 | 説明 |
|---|---|
| 引数の 1 つが有効ではありません。 | |
| 予期しないエラーが発生しました。 | |
| この操作に使用できるメモリが不足しています。 |
解説(Remarks)
OnRun が呼び出されると、キャッシュは通知を受け取れるように、ソースデータオブジェクトとの間で必要に応じてアドバイザリー接続を設定します。実行中オブジェクトとキャッシュの間に作成されたアドバイザリー接続は、IOleCacheControl::OnStop が呼び出されたときに破棄されます。
一部のオブジェクトハンドラーやインプロセスサーバーは、キャッシュを受動的に使用し、OnRun を呼び出さない場合があります。これらのアプリケーションは、キャッシュが確実に更新されるように、必要なときに IOleCache2::UpdateCache、IOleCache::InitCache、または IOleCache::SetData を呼び出してキャッシュを満たす必要があります。
OnRun は、pDataObject で渡された IDataObject へのポインターに参照カウントを追加しません。pDataObject ポインターの有効期間が OnStop が呼び出されるまで持続することを保証するのは OleRun の呼び出し元の責任であるため、呼び出し元は対象のデータオブジェクト上の IDataObject へのポインターを保持している必要があります。
既存のアドバイズシンクを終了すべきであることをキャッシュに通知します。接続が実際に存在していたかどうかは示されません。
戻り値
このメソッドは、成功すると S_OK を返します。その他に返される可能性のある値には、次のものがあります。
| 戻り値 | 説明 |
|---|---|
| 予期しないエラーが発生しました。 | |
| この操作に使用できるメモリが不足しています。 |
解説(Remarks)
実行中オブジェクトとキャッシュの間のデータアドバイザリー接続は、OnStop の呼び出しの一部として破棄されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IOleCacheControl "{00000129-0000-0000-C000-000000000046}"
#usecom global IOleCacheControl IID_IOleCacheControl "{}"
#comfunc global IOleCacheControl_OnRun 3 sptr
#comfunc global IOleCacheControl_OnStop 4
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。