Visualizando e exibição de dados
Digite visualizadores e apresentar dados de visualizadores personalizados de forma que seja significativa rapidamente para um desenvolvedor. O avaliador de expressão (EE) pode oferecer suporte a visualizadores de terceiros tipo bem como fornecer seus próprios visualizadores personalizados.
Visual StudioDetermina quantos visualizadores de tipo e visualizadores personalizados estão associados com o tipo de objeto, chamando o IDebugProperty3::GetCustomViewerCount método. Se houver visualisador de pelo menos um tipo ou o visualizador personalizado disponível, o Visual Studio chama o IDebugProperty3::GetCustomViewerList método para recuperar uma lista desses visualizadores e visualizadores (na verdade, uma lista de CLSIDs que implementam os visualizadores e visualizadores) e as apresenta ao usuário.
Visualizadores de tipo de suporte.
Existem várias interfaces que o EE deve implementar para dar suporte a visualizadores de tipo. Essas interfaces podem ser divididas em duas amplas categorias: aqueles que listam os visualizadores de tipo e aqueles que acessam os dados de propriedade.
Listando os visualizadores de tipo
O EE suporta listando os visualizadores de tipo em sua implementação de IDebugProperty3::GetCustomViewerCount e IDebugProperty3::GetCustomViewerList. Esses métodos passá-la para os métodos correspondentes IEEVisualizerService::GetCustomViewerCount e IEEVisualizerService::GetCustomViewerList.
O IEEVisualizerService é obtida chamando IEEVisualizerServiceProvider::CreateVisualizerService. Este método requer o IDebugBinder3 interface, que é obtida a partir do IDebugBinder interface é passado para IDebugParsedExpression::EvaluateSync. IEEVisualizerServiceProvider::CreateVisualizerServicetambém requer o IDebugSymbolProvider e IDebugAddress interfaces que foram passados para IDebugParsedExpression::EvaluateSync. A interface final necessário para criar o IEEVisualizerService interface é o IEEVisualizerDataProvider interface, que o EE implementa. Essa interface permite que as alterações sejam feitas na propriedade que está sendo visualizado. Todos os dados de propriedade é encapsulada em um IDebugObject interface, que também é implementada pelo EE.
Acessando dados de propriedade
Acessando dados de propriedade é feito por meio de IPropertyProxyEESide interface. Para obter essa interface, chama o Visual Studio QueryInterface no objeto de propriedade para obter o IPropertyProxyProvider interface (implementado no mesmo objeto que implementa o IDebugProperty3 interface) e, em seguida, chama o IPropertyProxyProvider::GetPropertyProxy método para obter o IPropertyProxyEESide interface.
Todos os dados passaram de e para o IPropertyProxyEESide interface é encapsulada na IEEDataStorage interface. Essa interface representa uma matriz de bytes e é implementada pelo Visual Studio e o EE. Quando os dados de uma propriedade a ser alterada, o Visual Studio cria um IEEDataStorage objeto mantendo os novos dados e chamadas IPropertyProxyEESide::CreateReplacementObject com esse objeto de dados para obter uma nova IEEDataStorage o objeto que, por sua vez, é passado para IPropertyProxyEESide::InPlaceUpdateObject para atualizar os dados da propriedade. IPropertyProxyEESide::CreateReplacementObjectpermite que o EE instanciar sua própria classe que implementa o IEEDataStorage interface.
Visualizadores personalizados de suporte.
O sinalizador DBG_ATTRIB_VALUE_CUSTOM_VIEWER está definida na dwAttrib campo do DEBUG_PROPERTY_INFO estrutura (retornado por uma chamada para IDebugProperty2::GetPropertyInfo) para indicar que o objeto possui um visualizador personalizado associado a ele. Quando esse sinalizador estiver definido, o Visual Studio obtém o IDebugProperty3 interface da IDebugProperty2 interface usando o QueryInterface.
Se o usuário seleciona um visualizador personalizado, Visual Studio instancia o visualizador personalizado usando o Visualizador CLSID fornecido pelo IDebugProperty3::GetCustomViewerList método. Em seguida, chama um Visual Studio IDebugCustomViewer::DisplayValue para mostrar o valor para o usuário.
Normalmente, IDebugCustomViewer::DisplayValue apresenta uma exibição somente leitura dos dados. Para permitir que as alterações dos dados, o EE deve implementar uma interface personalizada que suporta a mudança de dados em um objeto de propriedade. O IDebugCustomViewer::DisplayValue método usa essa interface personalizada para oferecer suporte a alteração dos dados. O método procura a interface personalizada na IDebugProperty2 interface passado como o pDebugProperty argumento.
Dando suporte tanto digitar visualizadores e visualizadores personalizados
Um EE pode oferecer suporte a visualizadores de tipo e de visualizadores personalizados da IDebugProperty3::GetCustomViewerCount e IDebugProperty3::GetCustomViewerList métodos. Primeiro, o EE adiciona o número de visualizadores personalizados que está fornecendo o valor retornado pela IEEVisualizerService::GetCustomViewerCount método. Em segundo lugar, o EE acrescenta o CLSIDs dos seus próprios visualizadores personalizados para a lista retornada pelo IEEVisualizerService::GetCustomViewerList método.