Visualisieren und Anzeigen von Daten
Typschnellansichten und benutzerdefinierte Viewer stellen Daten auf eine Weise dar, die für einen Entwickler schnell aussagekräftig ist. Der Ausdrucksauswerter (EE) kann Visualisierungen von Drittanbietern unterstützen sowie eigene benutzerdefinierte Viewer bereitstellen.
Visual Studio bestimmt, wie viele Typschnellansichten und benutzerdefinierte Viewer dem Objekttyp zugeordnet sind, indem die GetCustomViewerCount-Methode aufgerufen wird. Wenn mindestens eine Typschnellansicht oder ein benutzerdefinierter Viewer verfügbar ist, ruft Visual Studio die GetCustomViewerList-Methode auf, um eine Liste dieser Visualisierungen und Viewer abzurufen (tatsächlich eine Liste der Elemente, die die Visualisierungen und Viewer implementiert) und sie dem Benutzer präsentiert.
Unterstützen von Typschnellansichten
Es gibt eine Reihe von Schnittstellen, die der EE implementieren muss, um Typschnellansichten zu unterstützen. Diese Schnittstellen können in zwei allgemeine Kategorien unterteilt werden: Schnittstellen, die die Typschnellansichten und Schnittstellen auflisten, die auf die Eigenschaftendaten zugreifen.
Auflistung von Typschnellansichten
Der EE unterstützt die Auflistung der Typschnellansichten in seiner Implementierung IDebugProperty3::GetCustomViewerCount
und IDebugProperty3::GetCustomViewerList
. Diese Methoden übergeben den Aufruf der entsprechenden Methoden "GetCustomViewerCount " und "GetCustomViewerList".
Der IEEVisualizerService wird durch Aufrufen von CreateVisualizerService abgerufen. Diese Methode erfordert die IDebugBinder3-Schnittstelle , die von der IDebugBinder-Schnittstelle abgerufen wird, die an EvaluateSync übergeben wird. IEEVisualizerServiceProvider::CreateVisualizerService
erfordert außerdem die Schnittstellen "IDebugSymbolProvider " und "IDebugAddress ", die an IDebugParsedExpression::EvaluateSync
". Die letzte Schnittstelle, die zum Erstellen der IEEVisualizerService
Schnittstelle erforderlich ist, ist die IEEVisualizerDataProvider-Schnittstelle , die vom EE implementiert wird. Diese Schnittstelle ermöglicht das Vornehmen von Änderungen an der zu visualisierenden Eigenschaft. Alle Eigenschaftendaten werden in einer IDebugObject-Schnittstelle gekapselt, die auch vom EE implementiert wird.
Zugreifen auf Eigenschaftendaten
Der Zugriff auf Eigenschaftendaten erfolgt über die IPropertyProxyEESide-Schnittstelle . Zum Abrufen dieser Schnittstelle ruft Visual Studio QueryInterface für das Eigenschaftsobjekt auf, um die IPropertyProxyProvider-Schnittstelle abzurufen (implementiert für dasselbe Objekt, das die IDebugProperty3-Schnittstelle implementiert), und ruft dann die GetPropertyProxy-Methode auf, um die IPropertyProxyEESide
Schnittstelle abzurufen.
Alle Daten, die an die IPropertyProxyEESide
Schnittstelle übergeben werden, werden in der IEEDataStorage-Schnittstelle gekapselt. Diese Schnittstelle stellt ein Bytearray dar und wird sowohl von Visual Studio als auch vom EE implementiert. Wenn die Daten einer Eigenschaft geändert werden sollen, erstellt Visual Studio ein IEEDataStorage
Objekt, das die neuen Daten enthält, und ruft CreateReplacementObject mit diesem Datenobjekt auf, um ein neues IEEDataStorage
Objekt abzurufen, das wiederum an InPlaceUpdateObject übergeben wird, um die Daten der Eigenschaft zu aktualisieren. IPropertyProxyEESide::CreateReplacementObject
ermöglicht dem EE, seine eigene Klasse zu instanziieren, die die IEEDataStorage
Schnittstelle implementiert.
Unterstützen von benutzerdefinierten Viewern
Das Flag DBG_ATTRIB_VALUE_CUSTOM_VIEWER
wird im dwAttrib
Feld der DEBUG_PROPERTY_INFO-Struktur (zurückgegeben durch einen Aufruf von GetPropertyInfo) festgelegt, um anzugeben, dass dem Objekt ein benutzerdefinierter Viewer zugeordnet ist. Wenn dieses Flag festgelegt ist, ruft Visual Studio die IDebugProperty3-Schnittstelle über die IDebugProperty2-Schnittstelle mithilfe von QueryInterface ab.
Wenn der Benutzer einen benutzerdefinierten Viewer auswählt, instanziiert Visual Studio den benutzerdefinierten Viewer mithilfe der von der IDebugProperty3::GetCustomViewerList
Methode bereitgestellten CLSID
Viewer. Visual Studio ruft dann DisplayValue auf, um den Wert für den Benutzer anzuzeigen.
IDebugCustomViewer::DisplayValue
In der Regel wird eine schreibgeschützte Ansicht der Daten angezeigt. Um Änderungen an den Daten zuzulassen, muss der EE eine benutzerdefinierte Schnittstelle implementieren, die das Ändern von Daten in einem Eigenschaftsobjekt unterstützt. Die IDebugCustomViewer::DisplayValue
Methode verwendet diese benutzerdefinierte Schnittstelle, um das Ändern der Daten zu unterstützen. Die Methode sucht nach der benutzerdefinierten Schnittstelle auf der Schnittstelle, die IDebugProperty2
pDebugProperty
als Argument übergeben wird.
Unterstützen von Typschnellansichten und benutzerdefinierten Viewern
Ein EE kann sowohl Typschnellansichten als auch benutzerdefinierte Viewer in den Methoden GetCustomViewerCount und GetCustomViewerList unterstützen. Zunächst fügt der EE die Anzahl der benutzerdefinierten Viewer hinzu, die er an den von der GetCustomViewerCount-Methode zurückgegebenen Wert angibt. Zweitens fügt der EE die CLSID
eigenen benutzerdefinierten Viewer an die Liste an, die von der GetCustomViewerList-Methode zurückgegeben wird.