IWdsTransportCacheable
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
永続的なデータを扱うオブジェクトにキャッシュ機能を提供します。このインターフェースは、永続化されたオブジェクトを表す他のインターフェースによって継承できます。
メソッド 4
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
オブジェクトのデータが変更されたかどうかを示す値を受け取ります。
| pbDirty | VARIANT_BOOL* | out | オブジェクトに未保存の変更があるかどうかを示すブール値を受け取る変数へのポインタである。 |
解説(Remarks)
IWdsTransportCacheable インターフェースのすべてのオブジェクトは、Dirty プロパティがクリアされた状態で開始します。いずれかのプロパティが変更されると、Dirty が設定され、そのオブジェクトにバッキングストアへまだコミットされていない変更が含まれていることを示します。変更が適切なメソッドによってコミットまたは明示的に破棄されると、Dirty プロパティはクリアされます。
IWdsTransportCacheable::Dirty プロパティをクリアし、続いてオブジェクトの IWdsTransportCacheable::Refresh メソッドを呼び出して現在のオブジェクトデータを再読み込みすることで、オブジェクトのデータメンバーに加えられたすべての変更を破棄します。
解説(Remarks)
このメソッドは任意のオブジェクトに対して呼び出すことができます。
オブジェクトの Dirty プロパティが設定されている限り常にオブジェクトデータを更新する Refresh とは異なり、このメソッドはまずオブジェクトの Dirty プロパティが設定されているかどうかを確認します。設定されている場合、このメソッドは Dirty プロパティをリセットし、続いてすべてのデータメンバーの現在の値を再読み込みします。Dirty が設定されていない場合、このメソッドは何も行わず、直ちに戻ります。
基になるデータストアから値を再読み込みすることで、オブジェクトのデータメンバーを更新します。これは、オブジェクトの IWdsTransportCacheable::Dirty プロパティが設定されている場合にのみ許可されます。
解説(Remarks)
Dirty プロパティが設定されているオブジェクトに対して呼び出された場合、このメソッドは、オブジェクトに加えられた変更を意図せず失うことを避けるために失敗します。呼び出し元が現在の変更を無視して格納済みのデータを再読み込みしたい場合は、代わりに IWdsTransportCacheable::Discard メソッドを呼び出す必要があります。
IWdsTransportCacheable::Dirty プロパティが設定されている場合、オブジェクトのデータメンバーを基になるデータストアにコミットします。それ以外の場合、このメソッドは何も行わずに戻ります。
解説(Remarks)
正常に完了すると、このメソッドは Dirty プロパティをクリアします。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWdsTransportCacheable "{46AD894B-0BAB-47DC-84B2-7B553F1D8F80}" #usecom global IWdsTransportCacheable IID_IWdsTransportCacheable "{70590B16-F146-46BD-BD9D-4AAA90084BF5}" #comfunc global IWdsTransportCacheable_get_Dirty 7 var #comfunc global IWdsTransportCacheable_Discard 8 #comfunc global IWdsTransportCacheable_Refresh 9 #comfunc global IWdsTransportCacheable_Commit 10 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IWdsTransportCacheable "{46AD894B-0BAB-47DC-84B2-7B553F1D8F80}" #usecom global IWdsTransportCacheable IID_IWdsTransportCacheable "{70590B16-F146-46BD-BD9D-4AAA90084BF5}" #comfunc global IWdsTransportCacheable_get_Dirty 7 sptr #comfunc global IWdsTransportCacheable_Discard 8 #comfunc global IWdsTransportCacheable_Refresh 9 #comfunc global IWdsTransportCacheable_Commit 10 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。