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


Определение символов в библиотеке

Средства просмотра символов отображают иерархические представления символов. Символы представляют пространства имен, объекты, классы, члены класса и другие элементы языка.

Каждый символ в иерархии можно определить с помощью сведений о навигации, передаваемых библиотекой символов в диспетчер объектов Visual Studio с помощью следующих интерфейсов:

Расположение символа в иерархии отличает символ. Он позволяет средствам просмотра символов переходить к определенному символу. Уникальный полный путь к символу определяет расположение. Каждый элемент в пути является узлом. Путь начинается с узла верхнего уровня и заканчивается определенным символом. Например, если метод M1 является членом класса C1 и C1 находится в пространстве имен N1, полный путь метода M1 — N1. C1. M1. Этот путь содержит три узла: N1, C1 и M1.

Сведения о навигации позволяют диспетчеру объектов Visual Studio находить, выбирать и сохранять выбранные символы в иерархии. Он позволяет переходить из одного средства просмотра в другой. При использовании обозревателя объектов для просмотра символов в проекте Visual C++ можно щелкнуть правой кнопкой мыши метод и запустить средство "Обозреватель вызовов", чтобы отобразить метод в графе вызовов.

Две формы описывают расположение символов. Каноническая форма основана на полном пути символа. Он представляет уникальное положение символа в иерархии. Он не зависит от инструмента просмотра символов. Чтобы получить канонические сведения о форме, диспетчер объектов Visual Studio вызывает EnumCanonicalNodes метод. Форма презентации описывает расположение символа в определенном инструменте просмотра символов. Позиция символа относительно положения других символов в иерархии. У заданного символа может быть несколько путей презентации, но только один канонический путь. Например, если класс C1 наследуется от класса C2 и оба класса находятся в пространстве имен N1, браузер объектов отображает следующее иерархическое дерево:

N1
    C1
        Bases and Interfaces
            C2
    C2
        Bases and Interfaces
. . . . . . . . . . .

Канонический путь класса C2 в этом примере — N1 + C2. Путь к презентации C2 включает узлы C1 и "Базы и интерфейсы": N1 + C1 + "Базы и интерфейсы" + C2.

Чтобы получить сведения о форме презентации, диспетчер объектов вызывает EnumPresentationNodes метод.

Получение канонических и презентаций сведений о формах

  1. Реализуйте метод EnumCanonicalNodes.

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

    public int EnumCanonicalNodes(out Microsoft.VisualStudio.Shell.Interop.IVsEnumNavInfoNodes ppEnum)
    {
        CallBrowserEnumNavInfoNodes EnumNavInfoNodes =
            new CallBrowserEnumNavInfoNodes(m_strMethod);
        ppEnum = (IVsEnumNavInfoNodes)(EnumNavInfoNodes);
        return 0;
    }
    
    
  2. Реализуйте метод EnumPresentationNodes.

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