Share via


Uso di oggetti client

Per una panoramica del ruolo degli oggetti client nell'interazione con il motore del debugger, vedere Oggetti client.

In generale, i metodi di un client possono essere chiamati solo dal thread in cui è stato creato il client. In genere, i metodi chiamati dal thread errato avranno esito negativo immediatamente. L'eccezione notevole a questa regola è il metodo CreateClient; questo metodo può essere chiamato da qualsiasi thread e restituisce un nuovo client che può essere usato nel thread da cui è stato chiamato. Altre eccezioni sono documentate nella sezione di riferimento.

Una stringa che descrive un oggetto client viene restituita dal metodo GetIdentity o può essere scritta nel flusso di output del motore usando OutputIdentity.

Interfacce COM

L'API del motore di debugger contiene diverse interfacce COM come le interfacce; implementano l'interfaccia IUnknown .

Le interfacce descritte nella sezione Interfacce motore di debug vengono implementate dal client (anche se non necessariamente alla versione più recente). È possibile usare il metodo COM IUnknown::QueryInterface per ottenere ognuna di queste interfacce da uno qualsiasi degli altri.

I client implementano l'interfaccia COM IUnknown e la usano per mantenere i conteggi dei riferimenti e la selezione dell'interfaccia. Tuttavia, i client non sono oggetti COM registrati. Il metodo IUnknown::AddRef viene usato per aumentare il conteggio dei riferimenti sull'oggetto e il metodo IUnknown ::Release viene usato per decrerere il conteggio dei riferimenti. Quando viene chiamato IUnknown::QueryInterface , il conteggio dei riferimenti viene incrementato, quindi quando un puntatore dell'interfaccia client non è più necessario IUnknown::Release deve essere chiamato per decrerere il conteggio dei riferimenti.

Il conteggio dei riferimenti verrà inizializzato in uno quando l'oggetto client viene creato usando DebugCreate o DebugConnect.

Per altre informazioni su quando i conteggi dei riferimenti devono essere incrementati e decrementati, vedere Platform SDK.

IUnknown::QueryInterface, DebugCreate e DebugConnect accettano ogni ID interfaccia come uno dei relativi argomenti. Questo ID interfaccia può essere ottenuto usando l'operatore __uuidof . Ad esempio:

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

Importante Le interfacce IDebug* come l'interfaccia IDebugEventCallbacks , anche se COM come, non sono api COM appropriate. La chiamata di queste interfacce dal codice gestito è uno scenario non supportato. Problemi come garbage collection e proprietà del thread, comportano un'instabilità del sistema quando le interfacce vengono chiamate con codice gestito.