Vizualizace a zobrazení dat
Vizualizéry typů a vlastní čtenáři prezentují data způsobem, který je pro vývojáře rychle smysluplný. Vyhodnocovač výrazů (EE) může podporovat vizualizéry typů třetích stran a také vlastní prohlížeče.
Visual Studio určuje, kolik vizualizérů typů a vlastních prohlížečů jsou přidruženy k typu objektu voláním GetCustomViewerCount metoda. Pokud je k dispozici alespoň jeden vizualizér typu nebo vlastní prohlížeč, Visual Studio volá metodu GetCustomViewerList k načtení seznamu těchto vizualizérů a diváků (ve skutečnosti seznam s, který implementuje vizualizéry a prohlížeče) a prezentuje je uživateli.
Podpůrné vizualizéry typů
Existuje řada rozhraní, která musí EE implementovat pro podporu vizualizérů typů. Tato rozhraní je možné rozdělit do dvou širokých kategorií: rozhraní, která uvádějí vizualizéry typů a rozhraní, která přistupují k datům vlastností.
Vizualizéry typů výpisu
EE podporuje výpis vizualizérů typů v jeho implementaci IDebugProperty3::GetCustomViewerCount
a IDebugProperty3::GetCustomViewerList
. Tyto metody předají volání odpovídající metody GetCustomViewerCount a GetCustomViewerList.
IEEVisualizerService je získán voláním CreateVisualizerService. Tato metoda vyžaduje IDebugBinder3 rozhraní, které je získáno z IDebugBinder rozhraní předané EvaluateSync. IEEVisualizerServiceProvider::CreateVisualizerService
také vyžaduje IDebugSymbolProvider a IDebugAddress rozhraní, které byly předány IDebugParsedExpression::EvaluateSync
. Poslední rozhraní potřebné k vytvoření IEEVisualizerService
rozhraní je IEEVisualizerDataProvider rozhraní, které EE implementuje. Toto rozhraní umožňuje provádět změny vizualizované vlastnosti. Všechna data vlastností jsou zapouzdřena v IDebugObject rozhraní, které je také implementováno EE.
Přístup k datům vlastností
Přístup k datům vlastností se provádí prostřednictvím rozhraní IPropertyProxyEESide . Chcete-li získat toto rozhraní, Visual Studio volá QueryInterface na objektu vlastnosti získat IPropertyProxyProvider rozhraní (implementované ve stejném objektu, který implementuje IDebugProperty3 rozhraní) a pak volá GetPropertyProxy Metoda získat IPropertyProxyEESide
rozhraní.
Všechna data předaná a mimo IPropertyProxyEESide
rozhraní jsou zapouzdřena v rozhraní IEEDataStorage . Toto rozhraní představuje pole bajtů a je implementováno sadou Visual Studio i EE. Při změně dat vlastnosti visual Studio vytvoří IEEDataStorage
objekt, který obsahuje nová data a volá CreateReplacementObject s tímto datovým objektem, aby získal nový IEEDataStorage
objekt, který se následně předává inPlaceUpdateObject k aktualizaci dat vlastnosti. IPropertyProxyEESide::CreateReplacementObject
umožňuje EE vytvořit instanci vlastní třídy, která implementuje IEEDataStorage
rozhraní.
Podpora vlastních prohlížečů
DBG_ATTRIB_VALUE_CUSTOM_VIEWER
Příznak je nastaven v dwAttrib
poli struktury DEBUG_PROPERTY_INFO (vrácený voláním GetPropertyInfo) označující, že objekt má přiřazen vlastní prohlížeč. Pokud je tento příznak nastaven, Visual Studio získá IDebugProperty3 rozhraní z IDebugProperty2 rozhraní pomocí QueryInterface.
Pokud uživatel vybere vlastní prohlížeč, Visual Studio vytvoří instanci vlastního prohlížeče pomocí prohlížeče CLSID
dodaného metodou IDebugProperty3::GetCustomViewerList
. Visual Studio potom zavolá DisplayValue , aby zobrazila hodnotu uživateli.
IDebugCustomViewer::DisplayValue
Za normálních okolností představuje zobrazení dat jen pro čtení. Aby bylo možné změny dat povolit, musí EE implementovat vlastní rozhraní, které podporuje změnu dat v objektu vlastnosti. Tato IDebugCustomViewer::DisplayValue
metoda používá toto vlastní rozhraní k podpoře změny dat. Metoda hledá vlastní rozhraní v IDebugProperty2
rozhraní předané jako pDebugProperty
argument.
Podpora vizualizérů typů i vlastních prohlížečů
EE může podporovat vizualizéry typů i vlastní prohlížeče v metodách GetCustomViewerCount a GetCustomViewerList . Nejprve EE přidá počet vlastních prohlížečů, které dodává hodnotě vrácené GetCustomViewerCount metoda. Za druhé, EE připojí CLSID
s vlastní prohlížeče do seznamu vrácené GetCustomViewerList metoda.