IDebugCustomViewer

этот интерфейс позволяет средству оценки выражений (EE) отображать значение свойства в любом формате.

Синтаксис

IDebugCustomViewer : IUknown

Примечания для разработчиков

EE реализует этот интерфейс для вывода значения свойства в пользовательском формате.

Примечания для вызывающих объектов

Вызов CoCreateInstance функции COM создает экземпляр этого интерфейса. CLSIDПереданный в параметр CoCreateInstance получается из реестра. Вызов жеткустомвиеверлист получает расположение в реестре. Дополнительные сведения, а также пример см. в разделе Примечания.

Методы в порядке таблицы Vtable

Этот интерфейс реализует следующий метод:

Метод Описание
DisplayValue Выполняет какие-либо необходимые для вывода заданного значения.

Remarks

Этот интерфейс используется, если значение свойства не может быть отображено обычным способом, например с таблицей данных или другим типом сложного свойства. Пользовательское средство просмотра, представленное IDebugCustomViewer интерфейсом, отличается от визуализатора типов, который является внешней программой для отображения данных определенного типа независимо от ee. EE реализует пользовательское средство просмотра, относящееся к EE. Пользователь выбирает, какой тип визуализатора использовать, является визуализатором типов или пользовательским средством просмотра. Дополнительные сведения об этом процессе см. в разделе визуализация и просмотр данных .

пользовательское средство просмотра регистрируется так же, как EE и, следовательно, требует guid языка и guid поставщика. Точная метрика (или имя записи в реестре) известна только для EE. Эта метрика возвращается в структуре DEBUG_CUSTOM_VIEWER , которая, в свою очередь, возвращается вызовом жеткустомвиеверлист. Значение, хранящееся в метрике, — это объект CLSID , который передается в CoCreateInstance функцию com (см. пример).

Вспомогательные методы SDK для функции отладки , SetEEMetric могут использоваться для регистрации пользовательского средства просмотра. Debugging SDK HelpersКонкретные разделы реестра, необходимые для пользовательского средства просмотра, см. в разделе «оценки выражений» раздела. обратите внимание, что пользовательскому средству просмотра требуется только одна метрика (определяемая конструктором EE), в то время как средство оценки выражений требует наличия нескольких предопределенных метрик.

Обычно пользовательское средство просмотра предоставляет доступное только для чтения представление данных, так как интерфейс IDebugProperty3 , переданный в дисплайвалуе , не имеет методов для изменения значения свойства, за исключением строки. для поддержки изменения произвольных блоков данных EE реализует пользовательский интерфейс для того же объекта, который реализует IDebugProperty3 интерфейс. Этот пользовательский интерфейс затем предоставляет методы, необходимые для изменения произвольного блока данных.

Требования

Заголовок: мсдбг. h

Пространство имен: Microsoft. VisualStudio. Debugger. Interop

Сборка: Microsoft.VisualStudio.Debugger.Interop.dll

Пример

В этом примере показано, как получить первое пользовательское средство просмотра из свойства, если у этого свойства есть пользовательские средства просмотра.

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

См. также