Condividi tramite


Visualizzazione e osservazione dei dati

I visualizzatori di tipi e i visualizzatori personalizzati presentano i dati in modo che sia rapidamente significativo per uno sviluppatore. L'analizzatore di espressioni (EE) può supportare visualizzatori di tipi di terze parti e fornire visualizzatori personalizzati.

Visual Studio determina il numero di visualizzatori di tipi e visualizzatori personalizzati associati al tipo dell'oggetto chiamando il metodo GetCustomViewerCount . Se è disponibile almeno un visualizzatore di tipi o visualizzatore personalizzato, Visual Studio chiama il metodo GetCustomViewerList per recuperare un elenco di oggetti che implementano i visualizzatori e i viewer e li presenta all'utente.

Supporto per visualizzatori di tipi

Esistono diverse interfacce che l'EE deve implementare per supportare i visualizzatori di tipi. Queste interfacce possono essere suddivise in due categorie generali: interfacce che elencano i visualizzatori di tipi e le interfacce che accedono ai dati della proprietà.

Visualizzatori di tipi di elenchi

EE supporta l'elenco dei visualizzatori di tipi nell'implementazione di IDebugProperty3::GetCustomViewerCount e IDebugProperty3::GetCustomViewerList. Questi metodi passano la chiamata ai metodi corrispondenti GetCustomViewerCount e GetCustomViewerList.

Il servizio IEEVisualizerService viene ottenuto chiamando CreateVisualizerService. Questo metodo richiede l'interfaccia IDebugBinder3 , ottenuta dall'interfaccia IDebugBinder passata a EvaluateSync. IEEVisualizerServiceProvider::CreateVisualizerService richiede anche le interfacce IDebugSymbolProvider e IDebugAddress , passate a IDebugParsedExpression::EvaluateSync. L'interfaccia finale necessaria per creare l'interfaccia IEEVisualizerService è l'interfaccia IEEVisualizerDataProvider , implementata dall'EE. Questa interfaccia consente di apportare modifiche alla proprietà visualizzata. Tutti i dati delle proprietà vengono incapsulati in un'interfaccia IDebugObject , implementata anche da EE.

Accesso ai dati delle proprietà

L'accesso ai dati delle proprietà viene eseguito tramite l'interfaccia IPropertyProxyEESide . Per ottenere questa interfaccia, Visual Studio chiama QueryInterface sull'oggetto proprietà per ottenere l'interfaccia IPropertyProxyProvider (implementata nello stesso oggetto che implementa l'interfaccia IDebugProperty3 ) e quindi chiama il metodo GetPropertyProxy per ottenere l'interfaccia IPropertyProxyEESide .

Tutti i dati passati all'interno e all'esterno dell'interfaccia IPropertyProxyEESide vengono incapsulati nell'interfaccia IEEDataStorage . Questa interfaccia rappresenta una matrice di byte e viene implementata sia da Visual Studio che da EE. Quando i dati di una proprietà devono essere modificati, Visual Studio crea un IEEDataStorage oggetto che contiene i nuovi dati e chiama CreateReplacementObject con tale oggetto dati per ottenere un nuovo IEEDataStorage oggetto che, a sua volta, viene passato a InPlaceUpdateObject per aggiornare i dati della proprietà. IPropertyProxyEESide::CreateReplacementObject consente all'EE di creare un'istanza della propria classe che implementa l'interfaccia IEEDataStorage .

Supporto di visualizzatori personalizzati

Il flag DBG_ATTRIB_VALUE_CUSTOM_VIEWER viene impostato nel dwAttrib campo della struttura DEBUG_PROPERTY_INFO (restituita da una chiamata a GetPropertyInfo) per indicare che all'oggetto è associato un visualizzatore personalizzato. Quando questo flag è impostato, Visual Studio ottiene l'interfaccia IDebugProperty3 dall'interfaccia IDebugProperty2 usando QueryInterface.

Se l'utente seleziona un visualizzatore personalizzato, Visual Studio istanzia il visualizzatore personalizzato usando il CLSID fornito dal metodo IDebugProperty3::GetCustomViewerList. Visual Studio chiama quindi DisplayValue per mostrare il valore all'utente.

In genere, IDebugCustomViewer::DisplayValue presenta una visualizzazione di sola lettura dei dati. Per consentire le modifiche ai dati, EE deve implementare un'interfaccia personalizzata che supporta la modifica dei dati in un oggetto proprietà. Il IDebugCustomViewer::DisplayValue metodo usa questa interfaccia personalizzata per supportare la modifica dei dati. Il metodo cerca l'interfaccia personalizzata nell'interfaccia IDebugProperty2 passata come pDebugProperty argomento.

Supporto di visualizzatori di tipi e visualizzatori personalizzati

Un EE può supportare visualizzatori di tipi e visualizzatori personalizzati nei metodi GetCustomViewerCount e GetCustomViewerList . In primo luogo, EE aggiunge il numero di visualizzatori personalizzati che fornisce al valore restituito dal metodo GetCustomViewerCount . In secondo luogo, EE aggiunge i propri CLSIDvisualizzatori personalizzati all'elenco restituito dal metodo GetCustomViewerList.