Partager via


Utilisation d’objets client

Pour obtenir une vue d’ensemble du rôle des objets clients dans l’interaction avec le moteur de débogueur, consultez Objets clients.

En général, les méthodes d’un client peuvent être appelées uniquement à partir du thread dans lequel le client a été créé. En règle générale, les méthodes appelées à partir du thread incorrect échouent immédiatement. L’exception notable à cette règle est la méthode CreateClient ; cette méthode peut être appelée à partir de n’importe quel thread et retourne un nouveau client qui peut être utilisé dans le thread à partir duquel elle a été appelée. D’autres exceptions sont documentées dans la section de référence.

Une chaîne décrivant un objet client est retournée par la méthode GetIdentity ou peut être écrite dans le flux de sortie du moteur à l’aide de OutputIdentity.

COM Interfaces

L’API du moteur de débogueur contient plusieurs interfaces de type COM ; ils implémentent l’interface IUnknown .

Les interfaces décrites dans la section Interfaces du moteur de débogage sont implémentées par le client (mais pas nécessairement à la dernière version). Vous pouvez utiliser la méthode COM IUnknown::QueryInterface pour obtenir chacune de ces interfaces à partir de l’une des autres.

Les clients implémentent l’interface COM IUnknown et l’utilisent pour gérer le nombre de références et la sélection d’interface. Toutefois, les clients ne sont pas des objets COM inscrits. La méthode IUnknown::AddRef est utilisée pour incrémenter le nombre de références sur l’objet, et la méthode IUnknown::Release permet de décrémenter le nombre de références. Quand IUnknown::QueryInterface est appelé, le nombre de références est incrémenté. Par conséquent, lorsqu’un pointeur d’interface client n’est plus nécessaire , IUnknown::Release doit être appelé pour décrémenter le nombre de références.

Le nombre de références est initialisé en un lorsque l’objet client est créé à l’aide de DebugCreate ou DebugConnect.

Pour plus d’informations sur le moment où le nombre de références doit être incrémenté et décrémenté, consultez le Kit de développement logiciel (SDK) de plateforme.

IUnknown::QueryInterface, DebugCreate et DebugConnect prennent chacun un ID d’interface comme argument. Cet ID d’interface peut être obtenu à l’aide de l’opérateur __uuidof . Par exemple :

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

Important Les interfaces IDebug* telles que l’interface IDebugEventCallbacks , bien que COM like, ne sont pas des API COM appropriées. L’appel de ces interfaces à partir de code managé est un scénario non pris en charge. Les problèmes tels que le garbage collection et la propriété des threads entraînent une instabilité du système lorsque les interfaces sont appelées avec du code managé.