다음을 통해 공유


클라이언트 개체 사용

디버거 엔진과 상호 작용하는 클라이언트 개체의 역할에 대한 개요는 클라이언트 개체를 참조하세요.

일반적으로 클라이언트의 메서드는 클라이언트가 만들어진 스레드에서만 호출될 수 있습니다. 일반적으로 잘못된 스레드에서 호출된 메서드는 즉시 실패합니다. 이 규칙의 주목할 만한 예외는 CreateClient 메서드입니다. 이 메서드는 모든 스레드에서 호출될 수 있으며 호출된 스레드에서 사용할 수 있는 새 클라이언트를 반환합니다. 다른 예외는 참조 섹션에 설명되어 있습니다.

클라이언트 개체를 설명하는 문자열은 GetIdentity 메서드에서 반환되거나 OutputIdentity를 사용하여 엔진의 출력 스트림에 쓸 수 있습니다.

COM 인터페이스

디버거 엔진 API에는 인터페이스와 같은 여러 COM이 포함되어 있습니다. IUnknown 인터페이스를 구현합니다.

디버그 엔진 인터페이스 섹션에 설명된 인터페이스는 클라이언트에서 구현됩니다(최신 버전일 필요는 없음). COM 메서드 IUnknown::QueryInterface 를 사용하여 이러한 각 인터페이스를 다른 인터페이스에서 가져올 수 있습니다.

클라이언트는 IUnknown COM 인터페이스를 구현하고 참조 수 및 인터페이스 선택을 유지 관리하는 데 사용합니다. 그러나 클라이언트는 등록된 COM 개체가 아닙니다. IUnknown::AddRef 메서드는 개체에 대한 참조 수를 증가하는 데 사용되며, IUnknown::Release 메서드는 참조 횟수를 감소하는 데 사용됩니다. IUnknown::QueryInterface가 호출되면 참조 수가 증가하므로 참조 수를 감소하기 위해 클라이언트 인터페이스 포인터가 더 이상 필요하지 않은 경우 IUnknown::Release를 호출해야 합니다.

참조 수는 DebugCreate 또는 DebugConnect를 사용하여 클라이언트 개체를 만들 때 하나로 초기화됩니다.

참조 횟수를 증가시키고 감소시켜야 하는 시기에 대한 자세한 내용은 플랫폼 SDK를 참조하세요.

IUnknown::QueryInterface, DebugCreateDebugConnect 는 각각 인터페이스 ID를 인수 중 하나로 사용합니다. 이 인터페이스 ID는 __uuidof 연산자를 사용하여 가져올 수 있습니다. 예:

IDebugClient * debugClient;
HRESULT Hr = DebugCreate( __uuidof(IDebugClient), (void **)&debugClient );

중요IDebugEventCallbacks 인터페이스와 같은 IDebug * 인터페이스는 COM과 비슷하지만 적절한 COM API는 아닙니다. 관리 코드에서 이러한 인터페이스를 호출하는 것은 지원되지 않는 시나리오입니다. 가비지 수집 및 스레드 소유권과 같은 문제로 인해 관리 코드로 인터페이스가 호출되면 시스템 불안정이 발생합니다.