Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les visualiseurs de types et les visionneuses personnalisées présentent des données d'une manière rapidement compréhensible 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.
Visualiseurs de type pris 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 listings
L’EE prend en charge le listage des visualiseurs de type dans son implémentation de IDebugProperty3::GetCustomViewerCount et 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 IEEDataStorage . 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 ce drapeau 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 fourni 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 supporter à la fois les visualiseurs de type et les visualiseurs personnalisés 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 .