개체 브라우저, 클래스 뷰, 호출 브라우저 및 기호 찾기 결과 도구는 Visual Studio에서 기호 검색 기능을 제공합니다. 이러한 도구는 기호의 계층적 트리 뷰를 표시하고 트리의 기호 간 관계를 표시합니다. 기호는 네임스페이스, 개체, 클래스, 클래스 멤버 및 다양한 구성 요소에 포함된 기타 언어 요소를 나타낼 수 있습니다. 구성 요소에는 Visual Studio 프로젝트, 외부 .NET Framework 구성 요소 및 형식(.tlb) 라이브러리가 포함됩니다. 자세한 내용은 코드 구조 보기를 참조하세요.
심볼 브라우징 라이브러리
언어 구현자는 구성 요소의 기호를 추적하고 인터페이스 집합을 통해 Visual Studio 개체 관리자에 기호 목록을 제공하는 라이브러리를 만들어 Visual Studio 기호 검색 기능을 확장할 수 있습니다. 라이브러리는 인터페이스에 의해 설명됩니다 IVsSimpleLibrary2 . Visual Studio 개체 관리자는 라이브러리에서 데이터를 가져와서 구성하여 기호 검색 도구에서 새 데이터에 대한 요청에 응답합니다. 이후에는 요청된 데이터로 도구를 채웁니다. Visual Studio 개체 관리자 IVsObjectManager2에 대한 참조를 가져오려면 서비스 ID를 SVsObjectManager 메서드에 GetService 전달합니다.
각 라이브러리는 모든 라이브러리에 대한 정보를 수집하는 Visual Studio 개체 관리자에 등록해야 합니다. 라이브러리를 등록하려면 메서드를 호출합니다 RegisterSimpleLibrary . 요청을 시작하는 도구에 따라 Visual Studio 개체 관리자는 적절한 라이브러리를 찾고 데이터를 요청합니다. 인터페이스 IVsSimpleObjectList2에서 설명하는 기호 목록들에서 데이터는 라이브러리와 Visual Studio 개체 관리자 사이를 이동합니다.
Visual Studio 개체 관리자는 라이브러리에 포함된 최신 데이터를 반영하도록 기호 검색 도구를 주기적으로 새로 고쳐야 합니다.
아래 다이어그램에는 라이브러리와 Visual Studio 개체 관리자 간의 요청/데이터 교환 프로세스의 주요 요소 샘플이 포함되어 있습니다. 다이어그램의 인터페이스는 관리 코드 애플리케이션의 일부입니다.
간의 데이터 흐름
Visual Studio 개체 관리자에 기호 목록을 제공하려면 먼저 메서드를 호출하여 Visual Studio 개체 관리자에 라이브러리를 RegisterSimpleLibrary 등록해야 합니다. 라이브러리가 등록되면 Visual Studio 개체 관리자는 라이브러리의 기능에 대한 특정 정보를 요청합니다. 예를 들어 라이브러리 플래그 및 메서드를 호출하여 지원되는 범주를 GetLibFlags2GetSupportedCategoryFields2 요청합니다. 어느 시점에서 도구 중 하나가 이 라이브러리에서 데이터를 요청하면 개체 관리자는 메서드를 호출 GetList2 하여 최상위 기호 목록을 요청합니다. 이에 대한 응답으로 라이브러리는 기호 목록을 만들고 인터페이스를 통해 Visual Studio 개체 관리자에 IVsSimpleObjectList2 노출합니다. Visual Studio 개체 관리자는 메서드를 호출 GetItemCount 하여 목록에 있는 항목 수를 결정합니다. 다음 요청은 모두 목록의 지정된 항목과 관련되며 각 요청에서 항목 인덱스 번호를 제공합니다. Visual Studio 개체 관리자는 메서드를 호출 GetCategoryField2 하여 항목의 형식, 접근성 및 기타 속성에 대한 정보를 수집합니다.
메서드를 호출 GetTextWithOwnership 하여 항목의 이름을 결정하고 메서드를 호출 GetDisplayData 하여 아이콘 정보를 요청합니다. 아이콘은 항목 이름의 왼쪽에 표시되며 항목의 형식, 접근성 및 기타 속성을 보여 줍니다.
Visual Studio 개체 관리자는 메서드를 GetExpandable3 호출하여 지정된 목록 항목이 확장 가능하고 자식 항목이 있는지 확인합니다. UI가 요소를 확장하라는 요청을 보내면 개체 관리자는 메서드를 호출 GetList2 하여 자식 기호 목록을 요청합니다. 트리의 다양한 부분이 필요에 따라 구축되는 과정이 계속됩니다.
비고
네이티브 코드 기호 공급자를 구현하려면 IVsLibrary2 및 IVsObjectList2 인터페이스를 사용합니다.