共用方式為


IDebugCustomViewer

這個介面可讓您的運算式評估工具 (EE),以顯示屬性的值是必要的格式。

IDebugCustomViewer : IUknown

實作器注意事項

EE 會實作這個介面來顯示屬性的值,以自訂的格式。

呼叫者的備忘稿

COM 的呼叫CoCreateInstance函式會具現化這個介面。 CLSID傳遞至CoCreateInstance取自登錄。 呼叫IDebugProperty3::GetCustomViewerList會取得在登錄中的位置。 如需詳細資訊,以及範例,請參閱 「 備註 」。

方法 Vtable 順序

這個介面會實作下列方法:

方法

描述

IDebugCustomViewer::DisplayValue

沒有項目,即顯示指定的值所需。

備註

當慣用的方式將無法顯示屬性的值,這個介面用 — 比方說,與資料表格或其他複雜屬性型別。 自訂的檢視器],以表示藉由IDebugCustomViewer介面,不同於型別視覺化檢視,也就是外部的程式,以顯示特定的型別,不論得知 ee 給予的資料。 得知 ee 給予實作自訂的檢視器專屬於該 EE。 使用者選取哪一種視覺化檢視來使用,它的型別視覺化檢視或自訂的檢視器。 請參閱便於檢視和檢視資料如需這個處理序的詳細資訊。

自訂的檢視器已登錄為 EE 相同的方式,並且因此,需要一種語言的 GUID 及供應商的 GUID。 只為 EE 已知精確的度量資訊 (或登錄項目名稱)。 這個度量資訊會在傳回DEBUG_CUSTOM_VIEWER結構,依序呼叫會傳回IDebugProperty3::GetCustomViewerList。 計量所儲存的值是CLSID ,會傳遞至 COM 的CoCreateInstance函式 (請參閱範例)。

SDK 的協助程式進行偵錯函式, SetEEMetric,可以用來註冊自訂的檢視器。 請參見"運算式評估工具 」 登錄Debugging SDK Helpers自訂的檢視器進行特定的登錄機碼的需要。 請注意,自訂的檢視器必須只有一個計量 (這就是 EE 實作者所定義),而運算式評估工具需要數個預先定義的度量資訊。

一般情況下,自訂的檢視器提供唯讀檢視的資料,因為IDebugProperty3介面提供給IDebugCustomViewer::DisplayValue沒有方法變更為字串的屬性的值除外。 為了支援變更任意的資料區塊,得知 ee 給予會實作自訂的介面,相同的物件實作IDebugProperty3介面。 這個自訂介面提供變更任意資料區塊的所需的方法。

需求

標頭: msdbg.h

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

請參閱

參考

IDebugProperty3::GetCustomViewerList

SDK 的協助程式進行偵錯

IDebugProperty3

概念

核心介面