Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby uzyskać przegląd roli obiektów klienta w interakcji z silnikiem debugera, zobacz Obiekty klienta.
Ogólnie rzecz biorąc, metody klienta mogą być wywoływane tylko z wątku, w którym został utworzony klient. Zazwyczaj metody wywoływane z nieprawidłowego wątku natychmiast kończą się niepowodzeniem. Godnym uwagi wyjątkiem od tej reguły jest metoda CreateClient; Ta metoda może być wywoływana z dowolnego wątku i zwraca nowego klienta, którego można użyć w wątku, z którego została wywołana. Inne wyjątki są udokumentowane w sekcji referencyjnej.
Ciąg opisujący obiekt klienta jest zwracany przez metodę GetIdentity lub można zapisać w strumieniu wyjściowym silnika przy użyciu OutputIdentity.
Interfejsy COM
Interfejs API silnika debugera zawiera kilka interfejsów podobnych do COM; implementują interfejs IUnknown.
Interfejsy opisane w sekcji Interfejsy aparatu debugowania są implementowane przez klienta (choć niekoniecznie w najnowszej wersji). Możesz użyć metody COM IUnknown::QueryInterface , aby uzyskać każdy z tych interfejsów z innych.
Klienci implementują interfejs IUnknown COM i używają go do obsługi liczników odwołań i wyboru interfejsu. Jednak klienci nie są zarejestrowanymi obiektami COM. Metoda IUnknown::AddRef służy do przyrostowania liczby odwołań w obiekcie, a metoda IUnknown::Release służy do dekrementacji liczby odwołań. Gdy wywoływana jest funkcja IUnknown::QueryInterface , liczba odwołań jest zwiększana, więc gdy wskaźnik interfejsu klienta nie jest już potrzebny, należy wywołać metodę IUnknown::Release , aby usunąć liczbę odwołań.
Liczba odwołań zostanie zainicjowana do jednej po utworzeniu obiektu klienta przy użyciu polecenia DebugCreate lub DebugConnect.
Zobacz zestaw SDK platformy, aby uzyskać więcej informacji o tym, kiedy liczby odwołań powinny być zwiększane i dekrementowane.
IUnknown::QueryInterface, DebugCreate i DebugConnect każdy ma identyfikator interfejsu jako jeden z ich argumentów. Ten identyfikator interfejsu można uzyskać przy użyciu operatora __uuidof . Na przykład:
IDebugClient * debugClient;
HRESULT Hr = DebugCreate( __uuidof(IDebugClient), (void **)&debugClient );
Ważne Interfejsy IDebug*, takie jak IDebugEventCallbacks, chociaż podobne do COM, nie są prawdziwymi interfejsami API COM. Wywoływanie tych interfejsów z zarządzanego kodu nie jest obsługiwanym scenariuszem. Problemy, takie jak zbieranie śmieci i zarządzanie właścicielstwem wątków, prowadzą do niestabilności systemu, kiedy interfejsy są wywoływane przy użyciu kodu zarządzalnego.