Поделиться через


IDebugCustomViewer

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

Синтаксис

IDebugCustomViewer : IUknown

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

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

Заметки для вызывающих абонентов

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

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

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

Метод Description
DisplayValue Все, что необходимо для отображения заданного значения.

Замечания

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

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

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

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

Requirements

Заголовок: msdbg.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);
}

См. также