Win32 API 日本語リファレンス
ホームSystem.Com › ICancelMethodCalls

ICancelMethodCalls

COM
IID00000029-0000-0000-c000-000000000046継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ICancelMethodCalls (objidlbase.h) インターフェイスは、送信中のメソッド呼び出しに対するキャンセル要求を管理し、その呼び出しの現在の状態を監視します。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT Cancel(DWORD ulSeconds)

ICancelMethodCalls::Cancel (objidlbase.h) メソッドは、メソッド呼び出しのキャンセルを要求します。

ulSecondsDWORDinクライアントがキャンセルを要求した後、サーバーが送信中の呼び出しを完了するまで待機する秒数。

戻り値

このメソッドは次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
キャンセル要求が行われました。
RPC_S_CALL_CANCELED
呼び出しはすでにキャンセルされていました。
CO_E_CANCEL_DISABLED
呼び出しを処理しているスレッドで、呼び出しのキャンセルが有効になっていません。
RPC_E_CALL_COMPLETE
タイムアウト期間中に呼び出しが完了しました。

解説(Remarks)

Cancel メソッドはキャンセル要求を発行するだけです。戻り値が S_OK であっても、呼び出しがキャンセルされたことを意味するわけではなく、呼び出しをキャンセルしようと試みたことを意味するにすぎません。キャンセル要求を受け取ったときのキャンセルオブジェクトの動作は、完全に実装者の裁量に委ねられています。

HRESULT を返すメソッドがキャンセルされた場合、戻り値は RPC_S_CALL_CANCELED になります。

vtbl 4 HRESULT TestCancel()

ICancelMethodCalls::TestCancel (objidlbase.h) メソッドは、呼び出しがキャンセルされたかどうかを判定します。

戻り値

呼び出しがキャンセルされた場合、戻り値は RPC_E_CALL_CANCELED です。そうでない場合は RPC_S_CALLPENDING です。

解説(Remarks)

サーバーオブジェクトは TestCancel を呼び出して、呼び出しがキャンセルされたかどうかを判定します。呼び出しがキャンセルされている場合、サーバーは必要なリソースをクリーンアップし、制御をクライアントに返す必要があります。

このメソッドは、クライアントとサーバーの両方から呼び出すことができます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

#define global IID_ICancelMethodCalls "{00000029-0000-0000-C000-000000000046}"
#usecom global ICancelMethodCalls IID_ICancelMethodCalls "{}"
#comfunc global ICancelMethodCalls_Cancel      3 int
#comfunc global ICancelMethodCalls_TestCancel  4
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。