Visualización de datosVisualizing and viewing data

Los visualizadores de tipo y presentar los datos de forma que sea significativo rápidamente a un desarrollador visores personalizados.Type visualizers and custom viewers present data in a way that is quickly meaningful to a developer. El evaluador de expresiones (EE) puede admiten visualizadores de tipo de terceros, así como proporcionar sus propios visores personalizados.The expression evaluator (EE) can support third-party type visualizers as well as supply its own custom viewers.

Programa para la mejoraVisual Studio Determina el número de visualizadores de tipo y visores personalizados están asociados con el tipo del objeto mediante una llamada a la GetCustomViewerCount método.determines how many type visualizers and custom viewers are associated with the object's type by calling the GetCustomViewerCount method. Si hay visualizador al menos un tipo o el visor personalizado disponible, Visual Studio llama el GetCustomViewerList método para recuperar una lista de dichos visualizadores y visores (en realidad, una lista de s que implementa los visualizadores y visores) y los presenta al usuario.If there is at least one type visualizer or custom viewer available, Visual Studio calls the GetCustomViewerList method to retrieve a list of those visualizers and viewers (actually, a list of s that implements the visualizers and viewers) and presents them to the user.

Compatibilidad con los visualizadores de tipoSupporting type visualizers

Hay una serie de interfaces que debe implementar el EE para admitir los visualizadores de tipo.There are a number of interfaces that the EE must implement to support type visualizers. Estas interfaces pueden dividirse en dos amplias categorías: las interfaces que se muestran los visualizadores de tipo y las interfaces que tienen acceso a los datos de propiedad.These interfaces can be broken down into two broad categories: interfaces that list the type visualizers and interfaces that access the property data.

Visualizadores de tipo de listaListing type visualizers

EE admite la enumeración de los visualizadores de tipo en su implementación de IDebugProperty3::GetCustomViewerCount y IDebugProperty3::GetCustomViewerList.The EE supports listing the type visualizers in its implementation of IDebugProperty3::GetCustomViewerCount and IDebugProperty3::GetCustomViewerList. Estos métodos pasan la llamada a los métodos correspondientes GetCustomViewerCount y GetCustomViewerList.These methods pass the call to the corresponding methods GetCustomViewerCount and GetCustomViewerList.

El IEEVisualizerService se obtiene mediante una llamada a CreateVisualizerService.The IEEVisualizerService is obtained by calling CreateVisualizerService. Este método requiere la IDebugBinder3 interfaz, que se obtiene de la IDebugBinder interfaz pasa a EvaluateSync.This method requires the IDebugBinder3 interface, which is obtained from the IDebugBinder interface passed to EvaluateSync. IEEVisualizerServiceProvider::CreateVisualizerService También requiere la IDebugSymbolProvider y IDebugAddress interfaces, que se pasaron a IDebugParsedExpression::EvaluateSync.IEEVisualizerServiceProvider::CreateVisualizerService also requires the IDebugSymbolProvider and IDebugAddress interfaces, which were passed to IDebugParsedExpression::EvaluateSync. La interfaz final necesaria para crear el IEEVisualizerService interfaz es la IEEVisualizerDataProvider interfaz, que implementa lo EE.The final interface required to create the IEEVisualizerService interface is the IEEVisualizerDataProvider interface, which the EE implements. Esta interfaz permite que se realicen cambios en la propiedad que se visualiza.This interface allows changes to be made to the property being visualized. Todos los datos de la propiedad se encapsula en un IDebugObject interfaz, que también se implementa mediante lo EE.All property data is encapsulated in an IDebugObject interface, which is also implemented by the EE.

Acceso a los datos de propiedadAccessing property data

Acceso a datos de la propiedad se realiza a través de la IPropertyProxyEESide interfaz.Accessing property data is done through the IPropertyProxyEESide interface. Para obtener esta interfaz, Visual Studio llama QueryInterface en el objeto de propiedad para obtener el IPropertyProxyProvider interfaz (implementado en el mismo objeto que implementa el IDebugProperty3 interfaz) y, a continuación, llama a la GetPropertyProxy método para obtener el IPropertyProxyEESide interfaz.To obtain this interface, Visual Studio calls QueryInterface on the property object to get the IPropertyProxyProvider interface (implemented on the same object that implements the IDebugProperty3 interface) and then calls the GetPropertyProxy method to obtain the IPropertyProxyEESide interface.

Todos los datos se pasan dentro y fuera de la IPropertyProxyEESide interfaz se encapsula en la IEEDataStorage interfaz.All data passed into and out of the IPropertyProxyEESide interface is encapsulated in the IEEDataStorage interface. Esta interfaz representa una matriz de bytes y se implementa mediante Visual Studio y en lo EE.This interface represents an array of bytes and is implemented by both Visual Studio and the EE. Cuando los datos de una propiedad se va a cambiar, Visual Studio crea un IEEDataStorage objeto que contiene los nuevos datos y las llamadas CreateReplacementObject con ese objeto de datos con el fin de obtener un nuevo IEEDataStorage objeto que, a su vez, pasa a InPlaceUpdateObject para actualizar los datos de la propiedad.When a property's data is to be changed, Visual Studio creates an IEEDataStorage object holding the new data and calls CreateReplacementObject with that data object in order to obtain a new IEEDataStorage object that, in turn, is passed to InPlaceUpdateObject to update the property's data. IPropertyProxyEESide::CreateReplacementObject permite la EE crear instancias de su propia clase que implementa el IEEDataStorage interfaz.IPropertyProxyEESide::CreateReplacementObject allows the EE to instantiate its own class that implements the IEEDataStorage interface.

Compatibilidad con los visores personalizadosSupporting custom viewers

La marca DBG_ATTRIB_VALUE_CUSTOM_VIEWER está establecido el dwAttrib campo de la DEBUG_PROPERTY_INFO estructura (devuelto por una llamada a GetPropertyInfo) para indicar que el objeto tiene un visor personalizado asociado con él.The flag DBG_ATTRIB_VALUE_CUSTOM_VIEWER is set in the dwAttrib field of the DEBUG_PROPERTY_INFO structure (returned by a call to GetPropertyInfo) to indicate that the object has a custom viewer associated with it. Cuando se establece esta marca, Visual Studio obtiene el IDebugProperty3 interfaz desde el IDebugProperty2 mediante la interfaz QueryInterface.When this flag is set, Visual Studio obtains the IDebugProperty3 interface from the IDebugProperty2 interface using QueryInterface.

Si el usuario selecciona un visor personalizado, Visual Studio crea una instancia del visor personalizado usando el Visor CLSID proporcionado por el IDebugProperty3::GetCustomViewerList método.If the user selects a custom viewer, Visual Studio instantiates the custom viewer using the viewer's CLSID supplied by the IDebugProperty3::GetCustomViewerList method. Visual Studio, a continuación, llama valor de visualización para mostrar el valor para el usuario.Visual Studio then calls DisplayValue to show the value to the user.

Normalmente, IDebugCustomViewer::DisplayValue presenta una vista de solo lectura de los datos.Normally, IDebugCustomViewer::DisplayValue presents a read-only view of the data. Para permitir que los cambios realizados en los datos, el EE debe implementar una interfaz personalizada que admita los datos que cambian en un objeto de propiedad.To allow changes to the data, the EE must implement a custom interface that supports changing data on a property object. El IDebugCustomViewer::DisplayValue método usa esta interfaz personalizada que se pueden cambiar los datos.The IDebugCustomViewer::DisplayValue method uses this custom interface to support changing the data. El método busca la interfaz personalizada el IDebugProperty2 interfaz pasa como el pDebugProperty argumento.The method looks for the custom interface on the IDebugProperty2 interface passed in as the pDebugProperty argument.

Compatibilidad con los visualizadores de tipo y visores personalizadosSupporting both type visualizers and custom viewers

Puede admitir un EE visualizadores de tipo y visores personalizados en el GetCustomViewerCount y GetCustomViewerList métodos.An EE can support both type visualizers and custom viewers in the GetCustomViewerCount and GetCustomViewerList methods. En primer lugar, el EE agrega el número de visores personalizados que suministra con el valor devuelto por la GetCustomViewerCount método.First, the EE adds the number of custom viewers that it is supplying to the value returned by the GetCustomViewerCount method. En segundo lugar, se anexa el EE el CLSIDs de sus propios visores personalizados para la lista devuelta por la GetCustomViewerList método.Second, the EE appends the CLSIDs of its own custom viewers to the list returned by the GetCustomViewerList method.

Vea tambiénSee also