데이터 시각화 및 보기
형식 시각화 도우미 및 사용자 지정 뷰어는 개발자에게 빠르게 의미 있는 방식으로 데이터를 제공합니다. EE(식 계산기)는 고유한 사용자 지정 뷰어를 제공할 뿐 아니라 타사 형식 시각화 도우미를 지원할 수 있습니다.
Visual Studio는 GetCustomViewerCount 메서드를 호출하여 개체 형식과 연결된 형식 시각화 도우미 및 사용자 지정 뷰어 수를 결정합니다. 하나 이상의 형식 시각화 도우미 또는 사용자 지정 뷰어를 사용할 수 있는 경우 Visual Studio는 GetCustomViewerList 메서드를 호출하여 해당 시각화 도우미 및 뷰어 목록(실제로 시각화 도우미 및 뷰어를 구현하는 목록)을 검색하고 사용자에게 표시합니다.
형식 시각화 도우미 지원
형식 시각화 도우미를 지원하기 위해 EE에서 구현해야 하는 여러 인터페이스가 있습니다. 이 인터페이스는 형식 시각화 도우미를 나열하는 인터페이스와 속성 데이터에 액세스하는 인터페이스의 두 개의 광범위한 범주로 나눌 수 있습니다.
형식 시각화 도우미 나열
EE는 IDebugProperty3::GetCustomViewerCount
및 IDebugProperty3::GetCustomViewerList
의 구현에서 형식 시각화 도우미 나열을 지원합니다. 이 메서드는 해당하는 메서드 GetCustomViewerCount 및 GetCustomViewerList에 대한 호출을 전달합니다.
IEEVisualizerService는 CreateVisualizerService를 호출하여 가져옵니다. 이 메서드에는 EvaluateSync에 전달된 IDebugBinder 인터페이스에서 가져온 IDebugBinder3 인터페이스가 필요합니다. IEEVisualizerServiceProvider::CreateVisualizerService
에는 IDebugParsedExpression::EvaluateSync
에 전달된 IDebugSymbolProvider 및 IDebugAddress 인터페이스도 필요합니다. IEEVisualizerService
인터페이스를 만드는 데 필요한 최종 인터페이스는 EE가 구현하는 IEEVisualizerDataProvider 인터페이스입니다. 이 인터페이스를 사용하면 시각화되는 속성을 변경할 수 있습니다. 모든 속성 데이터는 EE에서도 구현되는 IDebugObject 인터페이스에 캡슐화됩니다.
속성 데이터 액세스
속성 데이터에 액세스하는 작업은 IPropertyProxyEESide 인터페이스를 통해 수행됩니다. 이 인터페이스를 가져오기 위해 Visual Studio는 속성 개체에서 QueryInterface를 호출하여 IPropertyProxyProvider 인터페이스(IDebugProperty3 인터페이스를 구현하는 동일한 개체에 구현됨)를 가져온 다음, GetPropertyProxy 메서드를 호출하여 IPropertyProxyEESide
인터페이스를 가져옵니다.
IPropertyProxyEESide
인터페이스 내부 및 외부로 전달된 모든 데이터는 IEEDataStorage 인터페이스에 캡슐화됩니다. 이 인터페이스는 바이트 배열을 나타내며 Visual Studio와 EE 모두에서 구현됩니다. 속성의 데이터가 변경되면 Visual Studio는 새 데이터를 포함하는 IEEDataStorage
개체를 만들고, 해당 데이터 개체로 CreateReplacementObject를 호출하여 새 IEEDataStorage
개체를 가져오고, 이 개체는 다시 속성의 데이터를 업데이트하기 위해 InPlaceUpdateObject에 전달됩니다. IPropertyProxyEESide::CreateReplacementObject
를 사용하여 EE는 IEEDataStorage
인터페이스를 구현하는 자체 클래스를 인스턴스화할 수 있습니다.
사용자 지정 뷰어 지원
플래그 DBG_ATTRIB_VALUE_CUSTOM_VIEWER
는 DEBUG_PROPERTY_INFO 구조체의 dwAttrib
필드(GetPropertyInfo 호출로 반환됨)에 설정되어 개체에 연결된 사용자 지정 뷰어가 있음을 나타냅니다. 이 플래그가 설정되면 Visual Studio는 QueryInterface를 사용하여 IDebugProperty2 인터페이스에서 IDebugProperty3 인터페이스를 가져옵니다.
사용자가 사용자 지정 뷰어를 선택하는 경우 Visual Studio는 IDebugProperty3::GetCustomViewerList
메서드에서 제공하는 뷰어의 CLSID
를 사용하여 사용자 지정 뷰어를 인스턴스화합니다. 그런 다음, Visual Studio는 DisplayValue를 호출하여 사용자에게 값을 표시합니다.
일반적으로 IDebugCustomViewer::DisplayValue
는 데이터의 읽기 전용 뷰를 제공합니다. 데이터 변경을 허용하려면 EE는 속성 개체의 데이터 변경을 지원하는 사용자 지정 인터페이스를 구현해야 합니다. IDebugCustomViewer::DisplayValue
메서드는 이 사용자 지정 인터페이스를 사용하여 데이터 변경을 지원합니다. 메서드는 pDebugProperty
인수로 전달된 IDebugProperty2
인터페이스에서 사용자 지정 인터페이스를 찾습니다.
형식 시각화 도우미 및 사용자 지정 뷰어 모두 지원
EE는 GetCustomViewerCount 및 GetCustomViewerList 메서드에서 형식 시각화 도우미와 사용자 지정 뷰어를 모두 지원할 수 있습니다. 먼저 EE는 GetCustomViewerCount 메서드에서 반환되는 값에 제공하는 사용자 지정 뷰어 수를 추가합니다. 둘째, EE는 GetCustomViewerList 메서드에서 반환된 목록에 자체 사용자 지정 뷰어의 CLSID
를 추가합니다.