Dela via


Visualisera och visa data

Typvisualiserare och anpassade visare presenterar data på ett snabbt meningsfullt sätt för en utvecklare. Uttrycksutvärderaren (EE) kan stödja visualiserare av tredje part och tillhandahålla egna anpassade visningsprogram.

Visual Studio avgör hur många typvisualiserare och anpassade visningsprogram som är associerade med objektets typ genom att anropa metoden GetCustomViewerCount . Om det finns minst en typ visualiserare eller anpassad visare tillgänglig, anropar Visual Studio metoden GetCustomViewerList för att hämta en lista över dessa visualiserare och visare (faktiskt en lista över de som implementerar visualiserare och visare) och presenterar dem för användaren.

Visualiserare av stödtyp

Det finns ett antal gränssnitt som EE måste implementera för att stödja typvisualiseringar. Dessa gränssnitt kan delas upp i två breda kategorier: gränssnitt som visar de typvisualiserare och gränssnitt som har åtkomst till egenskapsdata.

Listar typvisare

EE stöder en lista över typvisualiserare i implementeringen av IDebugProperty3::GetCustomViewerCount och IDebugProperty3::GetCustomViewerList. Dessa metoder skickar anropet till motsvarande metoder GetCustomViewerCount och GetCustomViewerList.

IEEVisualizerService hämtas genom att anropa CreateVisualizerService. Den här metoden kräver gränssnittet IDebugBinder3 , som hämtas från IDebugBinder-gränssnittet som skickas till EvaluateSync. IEEVisualizerServiceProvider::CreateVisualizerService kräver också gränssnitten IDebugSymbolProvider och IDebugAddress, som skickades till IDebugParsedExpression::EvaluateSync. Det sista gränssnittet som krävs för att skapa IEEVisualizerService gränssnittet är gränssnittet IEEVisualizerDataProvider , som EE implementerar. Med det här gränssnittet kan ändringar göras i egenskapen som visualiseras. Alla egenskapsdata kapslas in i ett IDebugObject-gränssnitt , som också implementeras av EE.

Åtkomst till egenskapsdata

Åtkomst till egenskapsdata görs via gränssnittet IPropertyProxyEESide . För att hämta det här gränssnittet anropar Visual Studio QueryInterface på egenskapsobjektet för att hämta gränssnittet IPropertyProxyProvider (implementerat på samma objekt som implementerar gränssnittet IDebugProperty3 ) och anropar sedan metoden GetPropertyProxy för att hämta IPropertyProxyEESide gränssnittet.

Alla data som skickas till och ut från IPropertyProxyEESide gränssnittet kapslas in i gränssnittet IEEDataStorage . Det här gränssnittet representerar en matris med byte och implementeras av både Visual Studio och EE. När en egenskaps data ska ändras skapar Visual Studio ett IEEDataStorage objekt som innehåller nya data och anropar CreateReplacementObject med dataobjektet för att hämta ett nytt IEEDataStorage objekt som i sin tur skickas till InPlaceUpdateObject för att uppdatera egenskapens data. IPropertyProxyEESide::CreateReplacementObject gör att EE kan instansiera sin egen klass som implementerar IEEDataStorage gränssnittet.

Stöd för anpassade visningsprogram

Flaggan DBG_ATTRIB_VALUE_CUSTOM_VIEWER anges i fältet dwAttrib i structuren DEBUG_PROPERTY_INFO (returneras av ett anrop till GetPropertyInfo) för att visa att objektet har en anpassad visare associerad med det. När den här flaggan har angetts hämtar Visual Studio gränssnittet IDebugProperty3 från gränssnittet IDebugProperty2 med QueryInterface.

Om användaren väljer ett anpassat visningsprogram, instansierar Visual Studio det anpassade visningsprogrammet med hjälp av information som tillhandahålls av IDebugProperty3::GetCustomViewerList metoden. Visual Studio anropar sedan DisplayValue för att visa värdet för användaren.

IDebugCustomViewer::DisplayValue visar normalt en skrivskyddad vy av data. För att tillåta ändringar i data måste EE implementera ett anpassat gränssnitt som stöder ändring av data på ett egenskapsobjekt. Metoden IDebugCustomViewer::DisplayValue använder det här anpassade gränssnittet för att ändra data. Metoden söker efter det anpassade gränssnittet i IDebugProperty2-gränssnittet som skickas in som argument pDebugProperty.

Stöd för både typvisualiseringar och anpassade visningsprogram

En EE kan stödja både typvisualiseringar och anpassade vyer i metoderna GetCustomViewerCount och GetCustomViewerList. Först lägger EE till antalet anpassade användare som den tillhandahåller till det värde som returneras av metoden GetCustomViewerCount . För det andra lägger EE till sina egna anpassade visare i listan som returneras av metoden GetCustomViewerList.