Udostępnij za pośrednictwem


Wizualizowanie i wyświetlanie danych

Wizualizatory typów i osoby przeglądające niestandardowe przedstawiają dane w sposób, który jest szybko zrozumiały dla dewelopera. Ewaluator wyrażeń (EE) może obsługiwać wizualizatory typów innych firm, a także dostarczać własne niestandardowe osoby przeglądające.

Program Visual Studio określa, ile wizualizatorów typów i osób przeglądających niestandardowych jest skojarzonych z typem obiektu, wywołując metodę GetCustomViewerCount . Jeśli jest dostępny co najmniej jeden wizualizator typu lub przeglądarka niestandardowa, program Visual Studio wywołuje metodę GetCustomViewerList , aby pobrać listę tych wizualizatorów i osób przeglądających (faktycznie lista elementów, które implementują wizualizatory i osoby przeglądające) i przedstawia je użytkownikowi.

Obsługa wizualizatorów typów

Istnieje wiele interfejsów, które EE musi zaimplementować w celu obsługi wizualizatorów typów. Te interfejsy można podzielić na dwie szerokie kategorie: interfejsy zawierające listę wizualizatorów typów i interfejsów, które uzyskują dostęp do danych właściwości.

Wizualizatory typów list

EE obsługuje wyświetlanie listy wizualizatorów typów w implementacji elementów IDebugProperty3::GetCustomViewerCount i IDebugProperty3::GetCustomViewerList. Te metody przekazują wywołanie do odpowiednich metod GetCustomViewerCount i GetCustomViewerList.

Usługa IEEVisualizerService jest uzyskiwana przez wywołanie metody CreateVisualizerService. Ta metoda wymaga interfejsu IDebugBinder3 uzyskanego z interfejsu IDebugBinder przekazanego do funkcji EvaluateSync. IEEVisualizerServiceProvider::CreateVisualizerServiceWymaga również interfejsów IDebugSymbolProvider i IDebugAddress, które zostały przekazane do elementu IDebugParsedExpression::EvaluateSync. Ostatnim interfejsem wymaganym do utworzenia interfejsu IEEVisualizerService jest interfejs IEEVisualizerDataProvider , który implementuje EE. Ten interfejs umożliwia wprowadzanie zmian w wizualizacji właściwości. Wszystkie dane właściwości są hermetyzowane w interfejsie IDebugObject , który jest również implementowany przez EE.

Uzyskiwanie dostępu do danych właściwości

Uzyskiwanie dostępu do danych właściwości odbywa się za pośrednictwem interfejsu IPropertyProxyEESide . Aby uzyskać ten interfejs, program Visual Studio wywołuje metodę QueryInterface w obiekcie właściwości, aby uzyskać interfejs IPropertyProxyProvider (zaimplementowany w tym samym obiekcie, który implementuje interfejs IDebugProperty3 ), a następnie wywołuje metodę GetPropertyProxy w celu uzyskania interfejsu IPropertyProxyEESide .

Wszystkie dane przekazywane do interfejsu i z interfejsu IPropertyProxyEESide są hermetyzowane w interfejsie IEEDataStorage . Ten interfejs reprezentuje tablicę bajtów i jest implementowany zarówno przez program Visual Studio, jak i EE. Gdy dane właściwości mają zostać zmienione, program Visual Studio tworzy obiekt przechowujący IEEDataStorage nowe dane i wywołuje metodę CreateReplacementObject z tym obiektem danych w celu uzyskania nowego IEEDataStorage obiektu, który z kolei jest przekazywany do obiektu InPlaceUpdateObject w celu zaktualizowania danych właściwości. IPropertyProxyEESide::CreateReplacementObject Umożliwia EE utworzenie wystąpienia własnej klasy, która implementuje IEEDataStorage interfejs.

Obsługa niestandardowych osób przeglądających

Flaga DBG_ATTRIB_VALUE_CUSTOM_VIEWER jest ustawiana w dwAttrib polu struktury DEBUG_PROPERTY_INFO (zwracanej przez wywołanie getPropertyInfo), aby wskazać, że obiekt ma skojarzona niestandardową przeglądarkę. Po ustawieniu tej flagi program Visual Studio uzyskuje interfejs IDebugProperty3 z interfejsu IDebugProperty2 przy użyciu interfejsu QueryInterface.

Jeśli użytkownik wybierze przeglądarkę niestandardową, program Visual Studio tworzy wystąpienie przeglądarki niestandardowej przy użyciu przeglądarki CLSID dostarczonej przez metodę IDebugProperty3::GetCustomViewerList . Następnie program Visual Studio wywołuje metodę DisplayValue , aby wyświetlić wartość użytkownikowi.

IDebugCustomViewer::DisplayValue Zwykle przedstawia widok danych tylko do odczytu. Aby zezwolić na zmiany danych, EE musi zaimplementować interfejs niestandardowy, który obsługuje zmianę danych w obiekcie właściwości. Metoda IDebugCustomViewer::DisplayValue używa tego interfejsu niestandardowego do obsługi zmiany danych. Metoda wyszukuje interfejs niestandardowy w interfejsie IDebugProperty2 przekazanym pDebugProperty jako argument.

Obsługa wizualizatorów typów i niestandardowych osób przeglądających

EE może obsługiwać zarówno wizualizatory typów, jak i osoby przeglądające niestandardowe w metodach GetCustomViewerCount i GetCustomViewerList . Najpierw EE dodaje liczbę niestandardowych osób przeglądających, które są dostarczane do wartości zwracanej przez metodę GetCustomViewerCount . Po drugie, EE dołącza CLSIDs własnych niestandardowych osób przeglądających do listy zwróconej przez metodę GetCustomViewerList .