Aracılığıyla paylaş


IDebugCustomViewer

Bu arabirim, bir ifade değerlendiricinin (EE) bir özelliğin değerini gereken biçimde görüntülemesini sağlar.

Sözdizimi

IDebugCustomViewer : IUknown

Uygulayıcılar için Notlar

EE, bir özelliğin değerini özel biçimde görüntülemek için bu arabirimi uygular.

Arayanlar İçin Notlar

COM CoCreateInstance işlevinin çağrısı bu arabirimin örneğini oluşturur. geçirilen CLSID CoCreateInstance kayıt defterinden alınır. GetCustomViewerList çağrısı, kayıt defterindeki konumu alır. Ayrıntılar ve Örnek için açıklamalar bölümüne bakın.

Vtable Sırasına Göre Yöntemler

Bu arabirim aşağıdaki yöntemi uygular:

Metot Açıklama
DisplayValue Belirli bir değeri görüntülemek için gereken her şeyi yapar.

Açıklamalar

Bu arabirim, bir özelliğin değeri normal yollarla görüntülenemediğinde (örneğin, bir veri tablosu veya başka bir karmaşık özellik türüyle) kullanılır. Arabirim tarafından IDebugCustomViewer temsil edilen özel görüntüleyici, EE'den bağımsız olarak belirli bir türdeki verileri görüntülemek için bir dış program olan tür görselleştiricisinden farklıdır. EE, o EE'ye özgü özel bir görüntüleyici uygular. Kullanıcı, tür görselleştiricisi veya özel görüntüleyici olsun, kullanılacak görselleştirici türünü seçer. Bu işlemle ilgili ayrıntılar için bkz . Verileri Görselleştirme ve Görüntüleme.

Özel görüntüleyici, EE ile aynı şekilde kaydedilir ve bu nedenle dil GUID'sini ve satıcı GUID'sini gerektirir. Tam ölçüm (veya kayıt defteri girdi adı) yalnızca EE tarafından bilinir. Bu ölçüm DEBUG_CUSTOM_VIEWER yapısında döndürülür ve bu da GetCustomViewerList çağrısı tarafından döndürülür. Ölçümde depolanan değer, COM CoCreateInstance işlevine geçirilen değerdir CLSID (Örnğe bakın).

Hata Ayıklama için SDK Yardımcıları işlevi, SetEEMetricözel bir görüntüleyici kaydetmek için kullanılabilir. Özel bir görüntüleyicinin ihtiyaç duyduğu belirli kayıt defteri anahtarları için "İfade Değerlendiricileri" kayıt defteri bölümüne Debugging SDK Helpers bakın. Özel görüntüleyicinin yalnızca bir ölçüme (EE uygulayıcısı tarafından tanımlanır) ihtiyacı olduğunu, bir ifade değerlendiricisinin ise önceden tanımlanmış birkaç ölçüm gerektirdiğini unutmayın.

Normalde, DisplayValue'ya sağlanan IDebugProperty3 arabiriminin özelliğin değerini dize olarak değiştirme yöntemi olmadığından, özel görüntüleyici verilerin salt okunur bir görünümünü sağlar. EE, rastgele veri bloklarının değiştirilmesini desteklemek için arabirimi uygulayan aynı nesneye özel bir arabirim uygular IDebugProperty3 . Bu özel arabirim daha sonra rastgele bir veri bloğunu değiştirmek için gereken yöntemleri sağlar.

Gereksinimler

Üst bilgi: msdbg.h

Ad Alanı: Microsoft.VisualStudio.Debugger.Interop

Derleme: Microsoft.VisualStudio.Debugger.Interop.dll

Örnek

Bu örnekte, özelliğin özel görüntüleyicileri varsa bir özellikten ilk özel görüntüleyicinin nasıl alındığı gösterilir.

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

Ayrıca bkz.