Udostępnij za pośrednictwem


IDebugCustomViewer

Ten interfejs umożliwia ewaluatorowi wyrażeń (EE) wyświetlanie wartości właściwości w każdym wymaganym formacie.

Składnia

IDebugCustomViewer : IUknown

Uwagi dotyczące implementacji

EE implementuje ten interfejs, aby wyświetlić wartość właściwości w formacie niestandardowym.

Uwagi dotyczące wywoływania

Wywołanie funkcji COM CoCreateInstance tworzy wystąpienie tego interfejsu. CLSID Przekazany element jest CoCreateInstance uzyskiwany z rejestru. Wywołanie metody GetCustomViewerList uzyskuje lokalizację w rejestrze. Zobacz Uwagi, aby uzyskać szczegółowe informacje, a także przykład.

Metody w tabeli Vtable Order

Ten interfejs implementuje następującą metodę:

Metoda opis
DisplayValue Robi to, co jest konieczne, aby wyświetlić daną wartość.

Uwagi

Ten interfejs jest używany, gdy wartość właściwości nie może być wyświetlana w normalny sposób — na przykład z tabelą danych lub innym typem właściwości złożonej. Przeglądarka niestandardowa, reprezentowana przez IDebugCustomViewer interfejs, różni się od wizualizatora typu, który jest programem zewnętrznym do wyświetlania danych określonego typu niezależnie od EE. EE implementuje niestandardową przeglądarkę specyficzną dla tego EE. Użytkownik wybiera typ wizualizatora, niezależnie od typu wizualizatora lub przeglądarki niestandardowej. Aby uzyskać szczegółowe informacje na temat tego procesu, zobacz Wizualizacja i wyświetlanie danych .

Przeglądarka niestandardowa jest rejestrowana w taki sam sposób jak EE, dlatego wymaga identyfikatora GUID języka i identyfikatora GUID dostawcy. Dokładna metryka (lub nazwa wpisu rejestru) jest znana tylko EE. Ta metryka jest zwracana w strukturze DEBUG_CUSTOM_VIEWER , która z kolei jest zwracana przez wywołanie metody GetCustomViewerList. Wartość przechowywana w metryce to CLSID wartość przekazywana CoCreateInstance do funkcji MODELU COM (zobacz przykład).

Pomocnicy zestawu SDK do debugowania funkcji SetEEMetric, mogą służyć do rejestrowania przeglądarki niestandardowej. Zobacz sekcję Debugging SDK Helpers rejestru "Ewaluatorzy wyrażeń" dla określonych kluczy rejestru, których potrzebuje przeglądarka niestandardowa. Należy pamiętać, że przeglądarka niestandardowa wymaga tylko jednej metryki (zdefiniowanej przez implementatorA EE), natomiast ewaluator wyrażeń wymaga kilku wstępnie zdefiniowanych metryk.

Zwykle przeglądarka niestandardowa udostępnia widok danych tylko do odczytu, ponieważ interfejs IDebugProperty3 dostarczony do elementu DisplayValue nie ma metod zmiany wartości właściwości z wyjątkiem ciągu. Aby obsługiwać zmienianie dowolnych bloków danych, EE implementuje interfejs niestandardowy na tym samym obiekcie, który implementuje IDebugProperty3 interfejs. Ten interfejs niestandardowy udostępnia następnie metody potrzebne do zmiany dowolnego bloku danych.

Wymagania

Nagłówek: msdbg.h

Przestrzeń nazw: Microsoft.VisualStudio.Debugger.Interop

Zestaw: Microsoft.VisualStudio.Debugger.Interop.dll

Przykład

W tym przykładzie pokazano, jak pobrać pierwszą niestandardową przeglądarkę z właściwości, jeśli ta właściwość ma dowolną niestandardową przeglądarkę.

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

Zobacz też