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