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::CreateVisualizerService
né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 CLSID
s de ses propres visionneuses personnalisées à la liste retournée par la méthode GetCustomViewerList .