IReconcilableObject
COM公式ドキュメント
指定されたドキュメントを調整(リコンサイル)するメソッドを公開します。このインターフェイスの実装は、ブリーフケースリコンサイラーが担当します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
あるオブジェクトの状態を、1 つ以上の他のオブジェクトと調整(リコンサイル)します。この調整では、すべてのオブジェクトの状態をマージして結合された状態を形成することにより、オブジェクトの内部状態を更新します。
| pInitiator | IReconcileInitiator* | in | 調整プロセスのイニシエーターに対応する IReconcileInitiator インターフェイスのアドレスです。このパラメーターを NULL にすることはできません。 |
| dwFlags | DWORD | in | 調整の制御フラグです。このパラメーターには、0 または次の値の組み合わせを指定できます。 RECONCILEF_FEEDBACKWINDOWVALIDhwndProgressFeedback パラメーターが有効です。 RECONCILEF_MAYBOTHERUSERブリーフケースリコンサイラーは、必要に応じてユーザーの操作を要求できます。この値を指定しない場合、ユーザーの操作は許可されません。hwndOwner パラメーターが有効です。 RECONCILEF_NORESIDUESOKブリーフケースリコンサイラーは、残差(residue)の要求を無視して調整を実行できます。残差をサポートしないリコンサイラーは、イニシエーターが残差を要求するたびにこの値を確認する必要があります。この値が指定されていない場合、残差をサポートしないリコンサイラーは直ちに REC_E_NORESIDUES を返す必要があります。 RECONCILEF_OMITSELFRESIDUEブリーフケースリコンサイラーは、このオブジェクトに関連付けられた残差を破棄できます。イニシエーターは通常、世代から世代へとループする調整に対してこの値を使用します。 RECONCILEF_ONLYYOUWERECHANGED変更されたオブジェクトの変更を、変更されていない他のオブジェクトに反映するために Reconcile メソッドが呼び出されています。この値は、次のキーがレジストリに存在する場合にのみ設定されます。 HKEY_CLASSES_ROOT
CLSID
{リコンサイラーの CLSID}
SingleChangeHook
このキーがレジストリに存在しない場合、イニシエーターは、変更されていない他のオブジェクトを変更されたオブジェクトのバイナリ的に同一なコピーにすることによって調整を実行します。 rgpmkOtherInput のモニカーが他のオブジェクトを識別します。この値は、RECONCILEF_YOUMAYDOTHEUPDATES も設定されている場合にのみ dwFlags に設定されます。ブリーフケースリコンサイラーが自身で更新を正常に完了した場合は、REC_S_IDIDTHEUPDATES を返し、 plOutIndex パラメーターが指す変数を -1L に設定する必要があります。この値が dwFlags に設定されている場合、成功時に S_OK を返してはならないことに注意してください。Reconcile が REC_S_IDIDTHEUPDATES を返した場合、イニシエーターはソースオブジェクトのストレージを保存しません。リコンサイラーがイニシエーターのビットコピー実装にフォールバックしたい場合は、S_FALSE を返すことができます。 RECONCILEF_RESUMEDRECONCILIATIONブリーフケースリコンサイラーは、提供された部分的な残差を使用して調整を再開する必要があります。この値が指定されていない場合、リコンサイラーは、いずれの入力バージョンに含まれる「検討されたが却下された」情報も無視する必要があります。 RECONCILEF_YOUMAYDOTHEUPDATESブリーフケースリコンサイラーは更新を実行できます。この値が指定されていない場合、リコンサイラーは更新を実行できません。調整が正常に完了した場合、リコンサイラーは、更新を実行したときは REC_S_IDIDTHEUPDATES を、更新を実行しなかったときは S_OK を返す必要があります。 |
| hwndOwner | HWND | in | ブリーフケースリコンサイラーが作成する子ウィンドウの親として使用されるウィンドウへのハンドルです。このパラメーターは、 dwFlags に RECONCILEF_MAYBOTHERUSER が指定されている場合にのみ有効です。 |
| hwndProgressFeedback | HWND | in | イニシエーターによって表示される進行状況フィードバックウィンドウへのハンドルです。このパラメーターは、 dwFlags に RECONCILEF_FEEDBACKWINDOWVALID が指定されている場合にのみ有効です。ブリーフケースリコンサイラーは、このウィンドウハンドルを使用して SetWindowText 関数を呼び出し、追加の調整状況情報をユーザーに表示できます。 |
| ulcInput | DWORD | in | |
| rgpmkOtherInput | IMoniker** | inout | 調整対象のバージョンまたは部分的な残差にアクセスするために使用するモニカーのアドレスを格納した配列のアドレスです。 |
| plOutIndex | INT* | out | 調整の結果が初期バージョンのいずれかと同一かどうかを示すインデックス値を受け取る変数のアドレスです。調整結果が 2 つ以上のバージョンの組み合わせである場合、この変数は -1L に設定されます。それ以外の場合は 0 から始まるインデックスであり、0 はこのオブジェクト、1 は最初のバージョン、2 は 2 番目のバージョン、というように続きます。 |
| pstgNewResidues | IStorage* | in | 新しい残差を格納するために使用する IStorage インターフェイスのアドレスです。残差を保存しないことを示すために、このパラメーターに NULL を指定できます。 |
| pvReserved | void* | optional | 予約済みです。NULL を指定する必要があります。 |
戻り値
Type: HRESULT
次のいずれかの値を返します。
| リターンコード | 説明 |
|---|---|
| 調整が正常に完了しました。変更を他のオブジェクトに反映する必要があります。 | |
| 調整アクションは実行されませんでした。ブリーフケースリコンサイラーは、イニシエーターのビットコピー実装にフォールバックしようとしています。この値は、 dwFlags に RECONCILEF_ONLYYOUWERECHANGED が設定されている場合にのみ返されます。 | |
| 調整が正常に完了し、関係するすべてのオブジェクト(Reconcile メソッドを実装するオブジェクトと、 rgpmkOtherInput によって記述される他のすべてのオブジェクト)が適切に更新されました。したがって、イニシエーターは変更を反映するためにこれ以上何もする必要はありません。Reconcile がこの値を返す場合は、 plOutIndex が指す変数を -1L に設定する必要があります。Reconcile がこの値を返した場合、イニシエーターはソースオブジェクトのストレージを保存しません。この値は、 dwFlags に RECONCILEF_YOUMAYDOTHEUPDATES が設定されている場合にのみ返されます。 | |
| ブリーフケースリコンサイラーは、調整の一部を完了しましたが、すべてではありません。ユーザーの操作が必要になる場合があります。変更は他のオブジェクトに反映されません。 | |
| ブリーフケースリコンサイラーは、調整の一部を完了しましたが、すべてではありません。ユーザーの操作が必要になる場合があります。変更は他のオブジェクトに反映されます。 | |
| ブリーフケースリコンサイラーは残差の生成をサポートしていないため、残差の要求は拒否されます。オブジェクトの状態は変更されません。 | |
| ブリーフケースリコンサイラーは、イニシエーターからの終了要求に応じて調整を停止しました(詳細については SetAbortCallback を参照してください)。オブジェクトの状態は未定義です。 | |
| 提供されたドキュメントのバージョンが互いに大きく異なりすぎているため、調整を実行できません。 | |
| オブジェクトの Reconcile 実装が呼び出されたときに RECONCILEF_YOUMAYDOTHEUPDATES フラグが設定されていませんでした。この実装では、この値が dwFlags パラメーターに設定されている必要があります。 | |
| オブジェクトは OLE 埋め込みオブジェクトであり、この操作を実行する前に実行(run)する必要があります。オブジェクトの状態は変更されません。 | |
| 不明なエラーです。 |
調整を完了するために必要な作業量の推定値を取得します。
| pulProgressMax | DWORD* | out | 作業量の推定値を受け取る変数のアドレスです。 |
戻り値
Type: HRESULT
成功した場合は S_OK を返し、それ以外の場合は次のいずれかのエラー値を返します。
| リターンコード | 説明 |
|---|---|
| オブジェクトは OLE 埋め込みドキュメントであり、この操作を実行する前に実行(run)する必要があります。この呼び出しの結果としてオブジェクトの状態は変更されません。 | |
| 不明なエラーです。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IReconcilableObject "{99180162-DA16-101A-935C-444553540000}" #usecom global IReconcilableObject IID_IReconcilableObject "{}" #comfunc global IReconcilableObject_Reconcile 3 sptr,int,sptr,sptr,int,sptr,var,sptr,sptr #comfunc global IReconcilableObject_GetProgressFeedbackMaxEstimate 4 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IReconcilableObject "{99180162-DA16-101A-935C-444553540000}" #usecom global IReconcilableObject IID_IReconcilableObject "{}" #comfunc global IReconcilableObject_Reconcile 3 sptr,int,sptr,sptr,int,sptr,sptr,sptr,sptr #comfunc global IReconcilableObject_GetProgressFeedbackMaxEstimate 4 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。