Udostępnij za pośrednictwem


Obsługa narzędzi do przeglądania symboli

Przeglądarka obiektów, widok klas, przeglądarka wywołań i narzędzia wyszukiwania wyników symboli zapewniają możliwości przeglądania symboli w programie Visual Studio. Te narzędzia wyświetlają hierarchiczne widoki drzewa symboli i pokazują relacje między symbolami w drzewie. Symbole mogą reprezentować przestrzenie nazw, obiekty, klasy, składowe klasy i inne elementy języka zawarte w różnych składnikach. Składniki obejmują projekty programu Visual Studio, zewnętrzne składniki programu .NET Framework i biblioteki typu (.tlb). Aby uzyskać więcej informacji, zobacz Wyświetlanie struktury kodu.

Biblioteki przeglądania symboli

Jako implementator języka można rozszerzyć możliwości przeglądania symboli programu Visual Studio, tworząc biblioteki, które śledzą symbole w składnikach i udostępniają listy symboli do menedżera obiektów programu Visual Studio za pomocą zestawu interfejsów. Biblioteka jest opisana IVsSimpleLibrary2 przez interfejs. Menedżer obiektów programu Visual Studio odpowiada na żądania dotyczące nowych danych z narzędzi przeglądania symboli, uzyskując dane z bibliotek i organizując je. Następnie wypełnia lub aktualizuje narzędzia przy użyciu żądanych danych. Aby uzyskać odwołanie do menedżera obiektów programu Visual Studio, IVsObjectManager2przekaż SVsObjectManager identyfikator usługi do GetService metody .

Każda biblioteka musi zarejestrować się w menedżerze obiektów programu Visual Studio, który zbiera informacje o wszystkich bibliotekach. Aby zarejestrować bibliotekę, wywołaj metodę RegisterSimpleLibrary . W zależności od tego, które narzędzie inicjuje żądanie, menedżer obiektów programu Visual Studio znajduje odpowiednią bibliotekę i żąda danych. Dane są przesyłane między bibliotekami a menedżerem obiektów programu Visual Studio na listach symboli opisanych przez IVsSimpleObjectList2 interfejs.

Menedżer obiektów programu Visual Studio jest odpowiedzialny za okresowe odświeżanie narzędzi przeglądania symboli w celu odzwierciedlenia najnowszych danych zawartych w bibliotekach.

Poniższy diagram zawiera przykład kluczowych elementów procesu wymiany żądań/danych między biblioteką a menedżerem obiektów programu Visual Studio. Interfejsy na diagramie są częścią aplikacji kodu zarządzanego.

Data flow between a library and the object manager

Aby udostępnić listy symboli menedżerowi obiektów programu Visual Studio, należy najpierw zarejestrować bibliotekę w menedżerze obiektów programu Visual Studio, wywołując metodę RegisterSimpleLibrary . Po zarejestrowaniu biblioteki menedżer obiektów programu Visual Studio żąda pewnych informacji o możliwościach biblioteki. Na przykład żąda flag biblioteki i obsługiwanych kategorii, wywołując GetLibFlags2 metody i GetSupportedCategoryFields2 . W pewnym momencie, gdy jeden z narzędzi żąda danych z tej biblioteki, menedżer obiektów żąda listy symboli najwyższego poziomu, wywołując metodę GetList2 . W odpowiedzi biblioteka tworzy listę symboli i uwidacznia ją w menedżerze obiektów programu Visual Studio za pośrednictwem interfejsu IVsSimpleObjectList2 . Menedżer obiektów programu Visual Studio określa, ile elementów znajduje się na liście, wywołując metodę GetItemCount . Wszystkie następujące żądania odnoszą się do danego elementu na liście i podaj numer indeksu elementu w każdym żądaniu. Menedżer obiektów programu Visual Studio kontynuuje zbieranie informacji na temat typu, ułatwień dostępu i innych właściwości elementu przez wywołanie GetCategoryField2 metody .

Określa nazwę elementu, wywołując metodę GetTextWithOwnership i żądając informacji o ikonie przez wywołanie GetDisplayData metody . Ikona jest wyświetlana po lewej stronie nazwy elementu i przedstawia typ elementu, ułatwienia dostępu i innych właściwości.

Menedżer obiektów programu Visual Studio wywołuje metodę GetExpandable3 w celu określenia, czy dany element listy można rozwinąć i zawiera elementy podrzędne. Jeśli interfejs użytkownika wysyła żądanie rozwinięcia elementu, menedżer obiektów żąda podrzędnej listy symboli, wywołując metodę GetList2 . Proces jest kontynuowany z różnymi częściami drzewa tworzonego na żądanie.

Uwaga

Aby zaimplementować dostawcę symboli kodu natywnego, użyj IVsLibrary2 interfejsów i IVsObjectList2 .