コールバック オブジェクトの使用

エンジンで使用されるコールバック COM のようなインターフェイスが 3 つあります。エンジンまたはターゲットに加えられた変更をデバッガー拡張機能とアプリケーションに通知するための IDebugEventCallbacks、入力を要求するための IDebugInputCallbacks、出力を送信するための IDebugOutputCallbacks です。

コールバック オブジェクトはクライアントに登録されます。 3 つのコールバック インターフェイスのそれぞれについて、最大で 1 つのインスタンスを各クライアントに登録できます (インターフェイスの Unicode バージョンと ASCII バージョンは、同じインターフェイスとしてカウントされます)。

クライアントが作成されると、エンジンはそのクライアントが作成されたスレッドを記憶します。 エンジンは、クライアントに登録されているコールバック インスタンスを呼び出すたびに、この同じスレッドを使用します。 スレッドが使用中の場合、エンジンは必要な呼び出しをキューに入れます。 エンジンがこれらの呼び出しを行えるようにするには、クライアントのスレッドがアイドル状態のときに必ず DispatchCallbacks メソッドを呼び出す必要があります。 ExitDispatch メソッドにより、DispatchCallback が返されます。 スレッドが、デバッガー セッションを開始するために使用されたスレッドと同じ場合、エンジンは WaitForEvent メソッド中にコールバック呼び出しを行うことができるため、DispatchCallbacks を呼び出す必要はありません。

FlushCallback メソッド は、バッファー処理された出力を出力コールバックにすべて送信するようエンジンに指示します。

イベント コールバック オブジェクト

IDebugEventCallbacks インターフェイスは、イベント、およびエンジンとターゲットに加えられた変更をデバッガー拡張機能とアプリケーションに通知するために、エンジンによって使用されます。 IDebugEventCallbacks の実装は、SetEventCallbacks を使用してクライアントに登録できます。 クライアントに登録されている現在の実装は、GetEventCallbacks を使用して確認できます。 すべてのクライアントに登録されているイベント コールバックの数は、GetNumberEventCallbacks を使用して確認できます。

エンジンがイベントを管理する方法の詳細については、「イベントの監視」を参照してください。

入力コールバック オブジェクト

IDebugInputCallbacks インターフェイスは、デバッガー拡張機能とアプリケーションからの入力を要求するために、エンジンによって使用されます。 IDebugInputCallbacks の実装は、SetInputCallbacks を使用してクライアントに登録できます。 クライアントに登録されている現在の実装は、GetInputCallbacks を使用して確認できます。 すべてのクライアントに登録されている入力コールバックの数は、GetNumberInputCallbacks を使用して確認できます。

エンジンが入力を管理する方法の詳細については、「入力と出力」を参照してください。

出力コールバック オブジェクト

IDebugOutputCallbacks インターフェイスは、デバッガーの拡張機能とアプリケーションに出力を送信するために、エンジンによって使用されます。 IDebugOutputCallbacks の実装は、SetOutputCallbacks を使用してクライアントに登録できます。 クライアントに登録されている現在の実装は、GetOutputCallbacks を使用して確認できます。 すべてのクライアントに登録されている出力コールバックの数は、GetNumberOutputCallbacks を使用して確認できます。

エンジンが出力を管理する方法の詳細については、「入力と出力」を参照してください。

COM オブジェクトの一般的なこととして、エンジンがクライアントに登録されている場合はコールバック COM オブジェクトで IUnknown::AddRef を、そしてオブジェクトが置き換えられるかクライアントが削除された場合は IUnknown::Release を、エンジンは呼び出します。