IDebugCustomViewer

Diese Schnittstelle ermöglicht es einem Ausdrucksauswerter (EE), den Wert einer Eigenschaft in einem beliebigen Format anzuzeigen.

Syntax

IDebugCustomViewer : IUknown

Hinweise für Implementierer

Ein EE implementiert diese Schnittstelle, um den Wert einer Eigenschaft in einem benutzerdefinierten Format anzuzeigen.

Hinweise für Aufrufer

Ein Aufruf der COM-Funktion CoCreateInstance instanziiert diese Schnittstelle. Der CLSID übergebene CoCreateInstance Vorgang wird aus der Registrierung abgerufen. Ein Aufruf von GetCustomViewerList ruft den Speicherort in der Registrierung ab. Details sowie das Beispiel finden Sie in den Hinweisen.

Methoden in Vtable-Reihenfolge

Diese Schnittstelle implementiert die folgende Methode:

Methode Beschreibung
DisplayValue Führt alles aus, was zum Anzeigen eines bestimmten Werts erforderlich ist.

Hinweise

Diese Schnittstelle wird verwendet, wenn der Wert einer Eigenschaft nicht normal angezeigt werden kann , z. B. mit einer Datentabelle oder einem anderen komplexen Eigenschaftstyp. Ein benutzerdefinierter Viewer, wie durch die IDebugCustomViewer Schnittstelle dargestellt, unterscheidet sich von einer Typschnellansicht, bei der es sich um ein externes Programm zum Anzeigen von Daten eines bestimmten Typs unabhängig vom EE handelt. Der EE implementiert einen benutzerdefinierten Viewer, der für diesen EE spezifisch ist. Ein Benutzer wählt aus, welche Art von Visualizer verwendet werden soll, sei es eine Typschnellansicht oder ein benutzerdefinierter Viewer. Details zu diesem Prozess finden Sie unter "Visualisieren und Anzeigen von Daten ".

Ein benutzerdefinierter Viewer wird auf die gleiche Weise wie ein EE registriert und erfordert daher eine Sprach-GUID und eine Anbieter-GUID. Die genaue Metrik (oder der Name des Registrierungseintrags) ist nur für den EE bekannt. Diese Metrik wird in der DEBUG_CUSTOM_VIEWER-Struktur zurückgegeben, die wiederum durch einen Aufruf von GetCustomViewerList zurückgegeben wird. Der in der Metrik gespeicherte Wert ist der Wert, der an die CLSID COM-Funktion CoCreateInstance übergeben wird (siehe Beispiel).

Die SDK-Hilfsprogramme zum DebuggenSetEEMetrickönnen zum Registrieren eines benutzerdefinierten Viewers verwendet werden. Informationen zu den spezifischen Registrierungsschlüsseln, die ein benutzerdefinierter Viewer benötigt, finden Sie im Registrierungsabschnitt Debugging SDK Helpers "Expression Evaluators". Beachten Sie, dass ein benutzerdefinierter Viewer nur eine Metrik benötigt (die durch die Implementierung des EE definiert wird), während für einen Ausdrucksauswert mehrere vordefinierte Metriken erforderlich sind.

Normalerweise stellt ein benutzerdefinierter Viewer eine schreibgeschützte Ansicht der Daten bereit, da die für DisplayValue bereitgestellte IDebugProperty3-Schnittstelle keine Methoden zum Ändern des Eigenschaftswerts aufweist, mit Ausnahme einer Zeichenfolge. Um das Ändern beliebiger Datenblöcke zu unterstützen, implementiert das EE eine benutzerdefinierte Schnittstelle auf demselben Objekt, das die IDebugProperty3 Schnittstelle implementiert. Diese benutzerdefinierte Schnittstelle würde dann die Methoden bereitstellen, die zum Ändern eines beliebigen Datenblocks erforderlich sind.

Anforderungen

Header: msdbg.h

Namespace: Microsoft.VisualStudio.Debugger.Interop

Assembly: Microsoft.VisualStudio.Debugger.Interop.dll

Beispiel

In diesem Beispiel wird gezeigt, wie Sie den ersten benutzerdefinierten Viewer aus einer Eigenschaft abrufen, wenn diese Eigenschaft über benutzerdefinierte Viewer verfügt.

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

Siehe auch