Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wizualizatory typów i niestandardowe przeglądarki przedstawiają dane w sposób, który jest łatwo zrozumiały dla dewelopera. Ewaluator wyrażeń (EE) może obsługiwać zewnętrzne wizualizatory typów, a także dostarczać własne niestandardowe przeglądarki.
Program Visual Studio określa, ile wizualizatorów typów i przeglądarek niestandardowych jest skojarzonych z typem obiektu, wywołując metodę GetCustomViewerCount. Jeśli jest dostępny co najmniej jeden wizualizator typu lub niestandardowa przeglądarka, program Visual Studio wywołuje metodę GetCustomViewerList, aby pobrać listę tych wizualizatorów i przeglądarek (właściwie listę elementów, które implementują wizualizatory i przeglądarki) 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.
Wizualizacja typów listowania
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 EvaluateSync.
IEEVisualizerServiceProvider::CreateVisualizerService Również wymaga interfejsów IDebugSymbolProvider i IDebugAddress, które zostały przekazane do 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 i z interfejsu IPropertyProxyEESide są inkapsulowane 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 przeglądarek
Flaga DBG_ATTRIB_VALUE_CUSTOM_VIEWER jest ustawiona w dwAttrib polu struktury DEBUG_PROPERTY_INFO (zwracana przez wywołanie metody GetPropertyInfo), aby wskazać, że obiekt ma związaną z nim przeglądarkę niestandardową. 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 szuka interfejsu niestandardowego na podanym interfejsie IDebugProperty2, przekazanym jako argument pDebugProperty.
Obsługa wizualizatorów typów i przeglądarek niestandardowych
EE może obsługiwać zarówno wizualizatory typów, jak i przeglądarki niestandardowe w metodach GetCustomViewerCount i GetCustomViewerList. Najpierw EE dodaje liczbę niestandardowych przeglądarek, które dostarcza, do wartości zwracanej przez metodę GetCustomViewerCount. Po drugie, EE dołącza CLSIDs własnych niestandardowych przeglądarek do listy zwróconej przez metodę GetCustomViewerList.