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::CreateVisualizerService
Wymaga 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 CLSID
s własnych niestandardowych osób przeglądających do listy zwróconej przez metodę GetCustomViewerList .