Partager via


Visualisation et affichage des données

Les visualiseurs de types et les visionneuses personnalisées présentent des données d’une manière qui est rapidement significative pour un développeur. L’évaluateur d’expression (EE) peut prendre en charge les visualiseurs de types tiers ainsi que fournir ses propres visionneuses personnalisées.

Visual Studio détermine le nombre de visualiseurs de type et de visionneuses personnalisées associés au type de l’objet en appelant la méthode GetCustomViewerCount . S’il existe au moins un visualiseur de type ou une visionneuse personnalisée disponible, Visual Studio appelle la méthode GetCustomViewerList pour récupérer une liste de ces visualiseurs et visionneuses (en fait, une liste de s qui implémente les visualiseurs et les visionneuses) et les présente à l’utilisateur.

Visualisations de type prises en charge

Il existe un certain nombre d’interfaces que l’EE doit implémenter pour prendre en charge les visualiseurs de type. Ces interfaces peuvent être divisées en deux grandes catégories : les interfaces qui répertorient les visualiseurs de type et les interfaces qui accèdent aux données de propriété.

Visualiseurs de types de référencement

L’EE prend en charge la liste des visualiseurs de types dans son implémentation et IDebugProperty3::GetCustomViewerCount IDebugProperty3::GetCustomViewerList. Ces méthodes passent l’appel aux méthodes correspondantes GetCustomViewerCount et GetCustomViewerList.

IEEVisualizerService est obtenu en appelant CreateVisualizerService. Cette méthode nécessite l’interface IDebugBinder3 , obtenue à partir de l’interface IDebugBinder passée à EvaluateSync. IEEVisualizerServiceProvider::CreateVisualizerServicenécessite également les interfaces IDebugSymbolProvider et IDebugAddress, qui ont été passées à IDebugParsedExpression::EvaluateSync. L’interface finale requise pour créer l’interface IEEVisualizerService est l’interface IEEVisualizerDataProvider , que l’EE implémente. Cette interface permet d’apporter des modifications à la propriété en cours de visualisation. Toutes les données de propriété sont encapsulées dans une interface IDebugObject , qui est également implémentée par l’EE.

Accès aux données de propriété

L’accès aux données de propriété est effectué via l’interface IPropertyProxyEESide . Pour obtenir cette interface, Visual Studio appelle QueryInterface sur l’objet de propriété pour obtenir l’interface IPropertyProxyProvider (implémentée sur le même objet qui implémente l’interface IDebugProperty3 ), puis appelle la méthode GetPropertyProxy pour obtenir l’interface IPropertyProxyEESide .

Toutes les données transmises et hors de l’interface IPropertyProxyEESide sont encapsulées dans l’interface IEEData Stockage. Cette interface représente un tableau d’octets et est implémentée par Visual Studio et l’EE. Lorsque les données d’une propriété doivent être modifiées, Visual Studio crée un IEEDataStorage objet contenant les nouvelles données et appelle CreateReplacementObject avec cet objet de données afin d’obtenir un nouvel IEEDataStorage objet qui, à son tour, est transmis à InPlaceUpdateObject pour mettre à jour les données de la propriété. IPropertyProxyEESide::CreateReplacementObject permet à l’EE d’instancier sa propre classe qui implémente l’interface IEEDataStorage .

Prise en charge des visionneuses personnalisées

L’indicateur DBG_ATTRIB_VALUE_CUSTOM_VIEWER est défini dans le dwAttrib champ de la structure DEBUG_PROPERTY_INFO (retournée par un appel à GetPropertyInfo) pour indiquer que l’objet a une visionneuse personnalisée associée. Lorsque cet indicateur est défini, Visual Studio obtient l’interface IDebugProperty3 à partir de l’interface IDebugProperty2 à l’aide de QueryInterface.

Si l’utilisateur sélectionne une visionneuse personnalisée, Visual Studio instancie la visionneuse personnalisée à l’aide de CLSID la visionneuse fournie par la IDebugProperty3::GetCustomViewerList méthode. Visual Studio appelle ensuite DisplayValue pour afficher la valeur à l’utilisateur.

Normalement, IDebugCustomViewer::DisplayValue présente une vue en lecture seule des données. Pour autoriser les modifications apportées aux données, l’EE doit implémenter une interface personnalisée qui prend en charge la modification des données sur un objet de propriété. La IDebugCustomViewer::DisplayValue méthode utilise cette interface personnalisée pour prendre en charge la modification des données. La méthode recherche l’interface personnalisée sur l’interface IDebugProperty2 passée en tant qu’argument pDebugProperty .

Prise en charge des visualiseurs de type et des visionneuses personnalisées

Un EE peut prendre en charge les visualiseurs de type et les visionneuses personnalisées dans les méthodes GetCustomViewerCount et GetCustomViewerList . Tout d’abord, l’EE ajoute le nombre de visionneuses personnalisées qu’il fournit à la valeur retournée par la méthode GetCustomViewerCount . Deuxièmement, l’EE ajoute les CLSIDs de ses propres visionneuses personnalisées à la liste retournée par la méthode GetCustomViewerList .