Sdílet prostřednictvím


Použití klientských objektů

Přehled role klientských objektů při interakci s modulem ladicího programu naleznete v tématu Klientské objekty.

Obecně platí, že metody klienta mohou být volána pouze z vlákna, ve kterém byl klient vytvořen. Metody volané z nesprávného vlákna obvykle okamžitě selžou. Hlavní výjimkou tohoto pravidla je metoda CreateClient; tato metoda může být volána z libovolného vlákna a vrací nového klienta, který lze použít ve vlákně, ze kterého byl volán. Další výjimky jsou popsané v referenční části.

Řetězec popisující objekt klienta je vrácen metodou GetIdentity nebo může být zapsán do výstupního datového proudu modulu pomocí OutputIdentity.

Rozhraní COM

Rozhraní API ladicího programu obsahuje několik rozhraní podobných COM, která implementují rozhraní IUnknown.

Rozhraní popsaná v části Rozhraní ladicího stroje je implementována klientem (i když nemusí nutně v nejnovější verzi). Můžete použít metodu COM IUnknown::QueryInterface k získání každého z těchto rozhraní od některého z ostatních.

Klienti implementují rozhraní IUnknown a používají jej k udržování počtu odkazů a výběru rozhraní. Klienti však nejsou zaregistrované COM objekty. Metoda IUnknown::AddRef se používá k zvýšení počtu odkazů na objekt a metoda IUnknown::Release se používá k dekrementování počtu odkazů. Při zavolání IUnknown::QueryInterface se zvýší počet odkazů, takže pokud ukazatel klientského rozhraní už nepotřebujete, je třeba volat IUnknown::Release , aby se dekrementoval počet odkazů.

Počet odkazů se inicializuje na jeden při vytvoření klientského objektu pomocí DebugCreate nebo DebugConnect.

Další informace o tom, kdy se mají zvýšit a snížit počty odkazů, najdete v Platform SDK.

IUnknown::QueryInterface, DebugCreate a DebugConnect každý z nich vezme ID rozhraní jako jeden z jejich argumentů. Toto ID rozhraní lze získat pomocí operátoru __uuidof . Například:

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

Důležité Rozhraní IDebug*, jako je rozhraní IDebugEventCallbacks, i když je podobné COM, nejsou správná rozhraní COM API. Volání těchto rozhraní ze spravovaného kódu je nepodporovaný scénář. Problémy, jako je uvolňování paměti a vlastnictví vlákna, vedou k nestabilitě systému při volání rozhraní se spravovaným kódem.