Поделиться через


Вспомогательные средства просмотра символов

Обозреватель объектов, представление классов, браузер вызовов и средства поиска символов предоставляют возможности просмотра символов в Visual Studio. Эти средства отображают иерархические представления деревьев символов и показывают связи между символами в дереве. Символы могут представлять пространства имен, объекты, классы, члены класса и другие языковые элементы, содержащиеся в различных компонентах. Эти компоненты включают проекты Visual Studio, внешние платформа .NET Framework компоненты и библиотеки типа (TLB). Дополнительные сведения см. в разделе Просмотр структуры кода.

Библиотеки просмотра символов

В качестве средства реализации языка можно расширить возможности просмотра символов Visual Studio, создав библиотеки, отслеживающие символы в компонентах и предоставляющие списки символов диспетчеру объектов Visual Studio с помощью набора интерфейсов. Библиотека описывается интерфейсом IVsSimpleLibrary2 . Диспетчер объектов Visual Studio отвечает на запросы новых данных из средств просмотра символов, получив данные из библиотек и упорядочив его. Затем он заполняет или обновляет средства запрошенными данными. Чтобы получить ссылку на диспетчер объектов Visual Studio, IVsObjectManager2передайте SVsObjectManager идентификатор службы в GetService метод.

Каждая библиотека должна зарегистрироваться в диспетчере объектов Visual Studio, который собирает сведения обо всех библиотеках. Чтобы зарегистрировать библиотеку RegisterSimpleLibrary , вызовите метод. В зависимости от того, какое средство инициирует запрос, диспетчер объектов Visual Studio находит соответствующую библиотеку и запрашивает данные. Данные перемещается между библиотеками и диспетчером объектов Visual Studio в списках символов, описанных интерфейсом IVsSimpleObjectList2 .

Диспетчер объектов Visual Studio отвечает за периодическое обновление средств просмотра символов, чтобы отразить самые текущие данные, содержащиеся в библиотеках.

На приведенной ниже схеме представлен пример ключевых элементов процесса обмена запросами и данными между библиотекой и диспетчером объектов Visual Studio. Интерфейсы на схеме являются частью приложения управляемого кода.

Data flow between a library and the object manager

Чтобы предоставить списки символов диспетчеру объектов Visual Studio, необходимо сначала зарегистрировать библиотеку в диспетчере объектов Visual Studio, вызвав RegisterSimpleLibrary метод. После регистрации библиотеки диспетчер объектов Visual Studio запрашивает определенные сведения о возможностях библиотеки. Например, он запрашивает флаги библиотеки и поддерживаемые категории, вызывая GetLibFlags2 методы и GetSupportedCategoryFields2 методы. В какой-то момент, когда один из средств запрашивает данные из этой библиотеки, диспетчер объектов запрашивает список символов верхнего уровня путем вызова GetList2 метода. В ответ библиотека производит список символов и предоставляет его диспетчеру IVsSimpleObjectList2 объектов Visual Studio через интерфейс. Диспетчер объектов Visual Studio определяет количество элементов в списке путем вызова GetItemCount метода. Все следующие запросы относятся к заданному элементу в списке и указывают номер индекса элемента в каждом запросе. Диспетчер объектов Visual Studio продолжает собирать сведения о типе, специальных возможностях и других свойствах элемента путем вызова GetCategoryField2 метода.

Он определяет имя элемента путем вызова GetTextWithOwnership метода и запрашивает сведения о значке путем вызова GetDisplayData метода. Значок отображается слева от имени элемента и отображает тип элемента, специальные возможности и другие свойства.

Диспетчер объектов Visual Studio вызывает GetExpandable3 метод, чтобы определить, является ли данный элемент списка расширяемым и имеет дочерние элементы. Если пользовательский интерфейс отправляет запрос на расширение элемента, диспетчер объектов запрашивает дочерний список символов путем вызова GetList2 метода. Процесс продолжается с различными частями дерева, построенного по требованию.

Примечание.

Для реализации поставщика символов машинного кода используйте IVsLibrary2 интерфейсы.IVsObjectList2