Partager via


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);
}

Voir aussi