クライアント オブジェクトの使用
デバッガー エンジンとの対話におけるクライアント オブジェクトの役割の概要については、「クライアント オブジェクト」を参照してください。
一般に、クライアントのメソッドは、クライアントが作成されたスレッドからのみ呼び出すことができます。 通常、間違ったスレッドから呼び出されたメソッドは、すぐに失敗します。 この規則で注意すべき例外は、CreateClient メソッドです。このメソッドはあらゆるスレッドから呼び出すことができ、呼び出し元のスレッドで使用できる新しいクライアントを返します。 その他の例外は、リファレンス セクションに記載されています。
クライアント オブジェクトを記述する文字列は、GetIdentity メソッドによって返されるか、場合によっては OutputIdentity を使用してエンジンの出力ストリームに書き込まれます。
COM インターフェイス
デバッガー エンジン API には、COM のようなインターフェイスがいくつか含まれており、IUnknown インターフェイスを実装します。
「デバッグ エンジン インターフェイス」セクションで説明されているインターフェイスは、クライアントによって実装されます (ただし、必ずしも最新バージョンではありません)。 COM メソッド IUnknown::QueryInterface を使用して、これらの各インターフェイスを他のインターフェイスから取得できます。
クライアントは IUnknown COM インターフェイスを実装して、参照カウントとインターフェイスの選択を維持するために使用します。 ただし、クライアントは登録済みの COM オブジェクトではありません。 IUnknown::AddRef メソッドはオブジェクトの参照カウントを増分するために使用され、IUnknown::Release メソッドは参照カウントを減分するために使用されます。 IUnknown::QueryInterface が呼び出されると参照カウントは増分されるため、クライアント インターフェイス ポインターが不要になった場合は、IUnknown::Release を呼び出して参照カウントを減分する必要があります。
DebugCreate または DebugConnect を使用してクライアント オブジェクトを作成すると、参照カウントが 1 に初期化されます。
参照カウントの増分および減分を実行する必要がある場合の詳細については、「プラットフォーム SDK」を参照してください。
IUnknown::QueryInterface、DebugCreate、DebugConnect はそれぞれ、インターフェイス ID を引数の 1 つとして取得します。 このインターフェイス ID は、__uuidof 演算子を使用して取得できます。 次に例を示します。
IDebugClient * debugClient;
HRESULT Hr = DebugCreate( __uuidof(IDebugClient), (void **)&debugClient );
重要IDebugEventCallbacks インターフェイスなどの IDebug* インターフェイスは、COM のようではあるものの、適切な COM API ではありません。 マネージド コードからこれらのインターフェイスを呼び出すことは、サポートされていないシナリオです。 ガベージ コレクションやスレッド所有権などの問題があると、マネージド コードでインターフェイスが呼び出された場合にシステムが不安定になります。