Sdílet prostřednictvím


IDebugCustomViewer

Toto rozhraní umožňuje vyhodnocovači výrazů (EE) zobrazit hodnotu vlastnosti v libovolném formátu.

Syntaxe

IDebugCustomViewer : IUknown

Poznámky pro implementátory

EE implementuje toto rozhraní k zobrazení hodnoty vlastnosti ve vlastním formátu.

Poznámky pro volající

Volání funkce modelu COM CoCreateInstance vytvoří instanci tohoto rozhraní. CoCreateInstance Předání CLSID je získáno z registru. Volání GetCustomViewerList získá umístění v registru. Podrobnosti a příklad najdete v poznámkách.

Metody v pořadí Vtable

Toto rozhraní implementuje následující metodu:

metoda Popis
DisplayValue Provede cokoli, co je nezbytné k zobrazení dané hodnoty.

Poznámky

Toto rozhraní se používá, když hodnotu vlastnosti nelze zobrazit běžným způsobem – například s tabulkou dat nebo jiným komplexním typem vlastnosti. Vlastní prohlížeč reprezentovaný rozhraním se liší od vizualizéru IDebugCustomViewer typu, což je externí program pro zobrazení dat určitého typu bez ohledu na EE. EE implementuje vlastní prohlížeč, který je specifický pro danou EE. Uživatel vybere, jaký typ vizualizéru se má použít, ať už jde o vizualizér typu nebo vlastní prohlížeč. Podrobnosti o tomto procesu najdete v tématu Vizualizace a zobrazení dat .

Vlastní prohlížeč je registrován stejným způsobem jako EE, a proto vyžaduje identifikátor GUID jazyka a identifikátor GUID dodavatele. Přesná metrika (nebo název položky registru) je známa pouze EE. Tato metrika je vrácena ve struktuře DEBUG_CUSTOM_VIEWER, která je vrácena voláním GetCustomViewerList. Hodnota uložená v metrice je CLSID předaná funkci modelu COM CoCreateInstance (viz příklad).

Pomocné rutiny sady SDK pro funkci ladění lze SetEEMetricpoužít k registraci vlastního prohlížeče. Konkrétní klíče registru, které vlastní prohlížeč potřebuje, najdete v části Debugging SDK Helpers registru Vyhodnocovače výrazů. Všimněte si, že vlastní prohlížeč potřebuje pouze jednu metriku (definovanou implementátorem EE), zatímco vyhodnocovač výrazů vyžaduje několik předdefinovaných metrik.

Za normálních okolností vlastní prohlížeč poskytuje zobrazení dat jen pro čtení, protože rozhraní IDebugProperty3 zadané do DisplayValue nemá žádné metody pro změnu hodnoty vlastnosti s výjimkou řetězce. Aby bylo možné podporovat změnu libovolných bloků dat, EE implementuje vlastní rozhraní na stejném objektu IDebugProperty3 , který implementuje rozhraní. Toto vlastní rozhraní pak poskytne metody potřebné ke změně libovolného bloku dat.

Požadavky

Hlavička: msdbg.h

Obor názvů: Microsoft.VisualStudio.Debugger.Interop

Sestavení: Microsoft.VisualStudio.Debugger.Interop.dll

Příklad

Tento příklad ukazuje, jak získat první vlastní prohlížeč z vlastnosti, pokud má tato vlastnost jakékoli vlastní prohlížeče.

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

Viz také