Condividi tramite


IDebugCustomViewer

Questa interfaccia consente a un analizzatore di espressioni (edizione Enterprise) di visualizzare il valore di una proprietà in qualsiasi formato necessario.

Sintassi

IDebugCustomViewer : IUknown

Note per gli implementatori

Un edizione Enterprise implementa questa interfaccia per visualizzare il valore di una proprietà in un formato personalizzato.

Note per i chiamanti

Una chiamata alla funzione COM crea un'istanza di CoCreateInstance questa interfaccia. L'oggetto CLSID passato a CoCreateInstance viene ottenuto dal Registro di sistema. Una chiamata a GetCustomViewerList ottiene il percorso nel Registro di sistema. Per informazioni dettagliate, vedere l'esempio.

Metodi nell'ordine Vtable

Questa interfaccia implementa il metodo seguente:

metodo Descrizione
DisplayValue Esegue qualsiasi operazione necessaria per visualizzare un determinato valore.

Osservazioni:

Questa interfaccia viene utilizzata quando il valore di una proprietà non può essere visualizzato normalmente, ad esempio con una tabella di dati o un altro tipo di proprietà complesso. Un visualizzatore personalizzato, rappresentato dall'interfacciaIDebugCustomViewer, è diverso da un visualizzatore di tipi, che è un programma esterno per la visualizzazione di dati di un tipo specifico indipendentemente dal edizione Enterprise. Il edizione Enterprise implementa un visualizzatore personalizzato specifico di tale edizione Enterprise. Un utente seleziona il tipo di visualizzatore da usare, ad esempio un visualizzatore di tipi o un visualizzatore personalizzato. Per informazioni dettagliate su questo processo, vedere Visualizzazione e visualizzazione dei dati .

Un visualizzatore personalizzato viene registrato nello stesso modo di un edizione Enterprise e, pertanto, richiede un GUID di lingua e un GUID fornitore. La metrica esatta (o il nome della voce del Registro di sistema) è nota solo ai edizione Enterprise. Questa metrica viene restituita nella struttura DEBUG_CUSTOM_VIEWER , che a sua volta viene restituita da una chiamata a GetCustomViewerList. Il valore archiviato nella metrica è l'oggetto CLSID passato alla funzione COM CoCreateInstance (vedere l'esempio).

Gli helper SDK per la funzione debug , SetEEMetric, possono essere usati per registrare un visualizzatore personalizzato. Vedere la sezione "Analizzatori di espressioni" di per le chiavi specifiche del Registro di Debugging SDK Helpers sistema necessarie a un visualizzatore personalizzato. Si noti che un visualizzatore personalizzato necessita di una sola metrica (definita dall'implementatore del edizione Enterprise), mentre un analizzatore di espressioni richiede diverse metriche predefinite.

In genere, un visualizzatore personalizzato fornisce una visualizzazione di sola lettura dei dati, poiché l'interfaccia IDebugProperty3 fornita a DisplayValue non dispone di metodi per modificare il valore della proprietà tranne come stringa. Per supportare la modifica di blocchi arbitrari di dati, il edizione Enterprise implementa un'interfaccia personalizzata sullo stesso oggetto che implementa l'interfaccia IDebugProperty3 . Questa interfaccia personalizzata fornirà quindi i metodi necessari per modificare un blocco arbitrario di dati.

Requisiti

Intestazione: msdbg.h

Spazio dei nomi: Microsoft.VisualStudio.Debugger.Interop

Assembly: Microsoft.VisualStudio.Debugger.Interop.dll

Esempio

In questo esempio viene illustrato come ottenere il primo visualizzatore personalizzato da una proprietà se tale proprietà include visualizzatori personalizzati.

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

Vedi anche