Delen via


Gegevens visualiseren en weergeven

Typvisualisaties en aangepaste weergaven presenteren gegevens op een manier die snel zinvol is voor een ontwikkelaar. De expressie-evaluator (EE) kan visualizers van derden ondersteunen en eigen aangepaste weergaven leveren.

Visual Studio bepaalt hoeveel type visualizers en aangepaste viewers zijn gekoppeld aan het type van het object door de getCustomViewerCount-methode aan te roepen. Als er ten minste één type visualizer of aangepaste viewer beschikbaar is, roept Visual Studio de methode GetCustomViewerList aan om een lijst met die visualizers en viewers op te halen (eigenlijk een lijst met s die de visuals en viewers implementeert) en deze aan de gebruiker presenteert.

Ondersteuning van typevisualiseerders

Er zijn een aantal interfaces die de EE moet implementeren ter ondersteuning van type visualiseren. Deze interfaces kunnen worden onderverdeeld in twee algemene categorieën: interfaces die het type visualiseren en interfaces die toegang hebben tot de gegevens van eigenschappen.

Visuele weergaven van lijstsoorten

De EE biedt ondersteuning voor het weergeven van de type-visualisatoren in zijn implementatie van IDebugProperty3::GetCustomViewerCount en IDebugProperty3::GetCustomViewerList. Deze methoden geven de aanroep door aan de bijbehorende methoden GetCustomViewerCount en GetCustomViewerList.

De IEEVisualizerService wordt verkregen door CreateVisualizerService aan te roepen. Voor deze methode is de IDebugBinder3-interface vereist, die wordt verkregen van de IDebugBinder-interface die wordt doorgegeven aan EvaluateSync. IEEVisualizerServiceProvider::CreateVisualizerService vereist ook de IDebugSymbolProvider - en IDebugAddress-interfaces , die zijn doorgegeven aan IDebugParsedExpression::EvaluateSync. De uiteindelijke interface die nodig is om de IEEVisualizerService interface te maken, is de IEEVisualizerDataProvider-interface , die door de EE wordt geïmplementeerd. Met deze interface kunnen wijzigingen worden aangebracht in de eigenschap die wordt gevisualiseerd. Alle eigenschapsgegevens worden ingekapseld in een IDebugObject-interface , die ook door de EE wordt geïmplementeerd.

Toegang tot eigenschapsgegevens

Toegang krijgen tot eigenschapsgegevens gebeurt via de interface IPropertyProxyEESide. Om deze interface te verkrijgen, roept Visual Studio QueryInterface aan op het eigenschapsobject om de interface IPropertyProxyProvider op te halen (geïmplementeerd op hetzelfde object dat de IDebugProperty3-interface implementeert) en roept vervolgens de GetPropertyProxy-methode aan om de IPropertyProxyEESide interface te verkrijgen.

Alle gegevens die in en uit de IPropertyProxyEESide interface worden doorgegeven, worden ingekapseld in de IEEDataStorage-interface . Deze interface vertegenwoordigt een matrix van bytes en wordt geïmplementeerd door Zowel Visual Studio als de EE. Wanneer de gegevens van een eigenschap moeten worden gewijzigd, maakt Visual Studio een IEEDataStorage object met de nieuwe gegevens en roept CreateReplacementObject aan met dat gegevensobject om een nieuw IEEDataStorage object te verkrijgen dat op zijn beurt wordt doorgegeven aan InPlaceUpdateObject om de gegevens van de eigenschap bij te werken. IPropertyProxyEESide::CreateReplacementObject stelt de EE in staat om een eigen klasse te instantiëren waarmee de IEEDataStorage interface wordt geïmplementeerd.

Ondersteuning voor aangepaste viewers

De vlag DBG_ATTRIB_VALUE_CUSTOM_VIEWER wordt ingesteld in het dwAttrib veld van de DEBUG_PROPERTY_INFO structuur (geretourneerd door een aanroep naar GetPropertyInfo) om aan te geven dat aan het object een aangepaste viewer is gekoppeld. Wanneer deze vlag is ingesteld, verkrijgt Visual Studio de IDebugProperty3-interface van de IDebugProperty2-interface met behulp van QueryInterface.

Als de gebruiker een aangepaste viewer selecteert, maakt Visual Studio een instantie van de aangepaste viewer met behulp van de viewer die CLSID door de IDebugProperty3::GetCustomViewerList methode is opgegeven. Visual Studio roept vervolgens DisplayValue aan om de waarde aan de gebruiker weer te geven.

Normaal gesproken wordt IDebugCustomViewer::DisplayValue weergegeven als een alleen-lezenweergave van de gegevens. Als u wijzigingen in de gegevens wilt toestaan, moet de EE een aangepaste interface implementeren die ondersteuning biedt voor het wijzigen van gegevens in een eigenschapsobject. De IDebugCustomViewer::DisplayValue methode maakt gebruik van deze aangepaste interface ter ondersteuning van het wijzigen van de gegevens. De methode zoekt naar de aangepaste interface op de IDebugProperty2 interface die als argument pDebugProperty wordt doorgegeven.

Ondersteuning voor zowel typevisualisaties als aangepaste weergaven

Een EE kan zowel type visualizers als aangepaste viewers ondersteunen in de methoden GetCustomViewerCount en GetCustomViewerList . Eerst voegt de EE het aantal aangepaste viewers toe dat deze levert aan de waarde die wordt geretourneerd door de GetCustomViewerCount-methode . Ten tweede voegt de EE de CLSID-componenten van zijn eigen aangepaste kijkers toe aan de lijst die wordt geretourneerd door de methode GetCustomViewerList.