IDebugCustomViewer
Cette interface permet à un évaluateur d’expression (EE) d’afficher la valeur d’une propriété dans le format nécessaire.
Syntaxe
IDebugCustomViewer : IUknown
Remarques pour les implémenteurs
Un EE implémente cette interface pour afficher la valeur d’une propriété dans un format personnalisé.
Remarques pour les appelants
Un appel à la CoCreateInstance
fonction COM instancie cette interface. L’objet CLSID
transmis CoCreateInstance
est obtenu à partir du Registre. Un appel à GetCustomViewerList obtient l’emplacement dans le Registre. Pour plus d’informations, consultez les remarques ainsi que l’exemple.
Méthodes dans l'ordre Vtable
Cette interface implémente la méthode suivante :
Méthode | Description |
---|---|
DisplayValue | Fait ce qui est nécessaire pour afficher une valeur donnée. |
Notes
Cette interface est utilisée lorsque la valeur d’une propriété ne peut pas être affichée par des moyens normaux, par exemple avec une table de données ou un autre type de propriété complexe. Une visionneuse personnalisée, telle qu’elle est représentée par l’interface IDebugCustomViewer
, est différente d’un visualiseur de type, qui est un programme externe pour afficher les données d’un type spécifique, quel que soit l’EE. L’EE implémente une visionneuse personnalisée spécifique à cet EE. Un utilisateur sélectionne le type de visualiseur à utiliser, qu’il s’agit d’un visualiseur de type ou d’une visionneuse personnalisée. Pour plus d’informations sur ce processus, consultez Visualisation et affichage des données .
Une visionneuse personnalisée est inscrite de la même façon qu’un EE et nécessite donc un GUID de langage et un GUID de fournisseur. La métrique exacte (ou le nom de l’entrée de Registre) est connue uniquement pour l’EE. Cette métrique est retournée dans la structure DEBUG_CUSTOM_VIEWER , qui, à son tour, est retournée par un appel à GetCustomViewerList. La valeur stockée dans la métrique est celle CLSID
transmise à la CoCreateInstance
fonction COM (voir l’exemple).
Les helpers du SDK pour la fonction débogage peuvent SetEEMetric
être utilisés pour inscrire une visionneuse personnalisée. Consultez la section de Registre « Évaluateurs d’expression » pour Debugging SDK Helpers
connaître les clés de Registre spécifiques dont une visionneuse personnalisée a besoin. Notez qu’une visionneuse personnalisée n’a besoin que d’une seule métrique (définie par l’implémenteur d’EE), tandis qu’un évaluateur d’expression nécessite plusieurs métriques prédéfinies.
Normalement, une visionneuse personnalisée fournit une vue en lecture seule des données, car l’interface IDebugProperty3 fournie à DisplayValue n’a aucune méthode pour modifier la valeur de la propriété, à l’exception d’une chaîne. Pour prendre en charge la modification des blocs de données arbitraires, l’EE implémente une interface personnalisée sur le même objet que celui qui implémente l’interface IDebugProperty3
. Cette interface personnalisée fournit ensuite les méthodes nécessaires pour modifier un bloc de données arbitraire.
Spécifications
En-tête : msdbg.h
Espace de noms : Microsoft.VisualStudio.Debugger.Interop
Assembly : Microsoft.VisualStudio.Debugger.Interop.dll
Exemple
Cet exemple montre comment obtenir la première visionneuse personnalisée à partir d’une propriété si cette propriété a des visionneuses personnalisées.
IDebugCustomViewer *GetFirstCustomViewer(IDebugProperty2 *pProperty)
{
// This string is typically defined globally. For this example, it
// is defined here.
static const WCHAR strRegistrationRoot[] = L"Software\\Microsoft\\VisualStudio\\8.0Exp";
IDebugCustomViewer *pViewer = NULL;
if (pProperty != NULL) {
CComQIPtr<IDebugProperty3> pProperty3(pProperty);
if (pProperty3 != NULL) {
HRESULT hr;
ULONG viewerCount = 0;
hr = pProperty3->GetCustomViewerCount(&viewerCount);
if (viewerCount > 0) {
ULONG viewersFetched = 0;
DEBUG_CUSTOM_VIEWER viewerInfo = { 0 };
hr = pProperty3->GetCustomViewerList(0,
1,
&viewerInfo,
&viewersFetched);
if (viewersFetched == 1) {
CLSID clsidViewer = { 0 };
CComPtr<IDebugCustomViewer> spCustomViewer;
// Get the viewer's CLSID from the registry.
::GetEEMetric(viewerInfo.guidLang,
viewerInfo.guidVendor,
viewerInfo.bstrMetric,
&clsidViewer,
strRegistrationRoot);
if (!IsEqualGUID(clsidViewer,GUID_NULL)) {
// Instantiate the custom viewer.
spCustomViewer.CoCreateInstance(clsidViewer);
if (spCustomViewer != NULL) {
pViewer = spCustomViewer.Detach();
}
}
}
}
}
}
return(pViewer);
}