類型視覺化檢視器和自訂檢視器會以對開發人員快速有意義的方式呈現資料。 表達式分析器(EE)能夠支援第三方類別視覺化工具,並提供自訂的檢視器。
Visual Studio 會呼叫 GetCustomViewerCount 方法,以判斷與物件類型相關聯的類型視覺化檢視和自訂檢視器數目。 如果至少有一個類型視覺化檢視器或自訂檢視器可用,Visual Studio 會呼叫 GetCustomViewerList 方法來擷取這些視覺化檢視工具和檢視器的清單 (實際上是實作視覺化檢視器和檢視器的 s 清單),並將其呈現給使用者。
支援類型視覺化工具
EE 必須實作許多介面,才能支援類型視覺化檢視。 這些介面可以分為兩大類別:列出類型視覺化檢視的介面,以及存取屬性資料的介面。
清單類型視覺化工具
EE 支援在其對IDebugProperty3::GetCustomViewerCount和IDebugProperty3::GetCustomViewerList的實作中列出類型顯示器。 這些方法會將呼叫傳遞至對應的方法 GetCustomViewerCount 和 GetCustomViewerList。
IEEVisualizerService 是藉由呼叫 CreateVisualizerService 來取得。 這個方法需要 IDebugBinder3 介面,這是從傳遞至 EvaluateSync 的 IDebugBinder 介面取得。
IEEVisualizerServiceProvider::CreateVisualizerService 也需要 IDebugSymbolProvider 和 IDebugAddress 介面,這些介面已傳遞至 IDebugParsedExpression::EvaluateSync。 建立 IEEVisualizerService 介面所需的最後一個介面是 IEEVisualizerDataProvider 介面,EE 會實作它。 此介面允許對正在視覺化的內容進行變更。 所有屬性資料都會封裝在 IDebugObject 介面中,該介面也是由 EE 實作。
存取屬性資料
存取屬性資料是透過 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會在dwAttrib欄位中的DEBUG_PROPERTY_INFO結構中設定(由呼叫GetPropertyInfo傳回),以指示物件有關聯的自訂檢視器。 設定此旗標時,Visual Studio 會使用 QueryInterface 從 IDebugProperty2 介面取得 IDebugProperty3 介面。
如果使用者選擇自訂檢視器,Visual Studio 會使用CLSID由IDebugProperty3::GetCustomViewerList方法提供的內容來實例化自訂檢視器。 然後,Visual Studio 會呼叫 DisplayValue ,以向使用者顯示值。
通常, IDebugCustomViewer::DisplayValue 會呈現資料的唯讀檢視。 若要允許變更資料,EE 必須實作自訂介面,以支援變更屬性物件上的資料。 此 IDebugCustomViewer::DisplayValue 方法使用此自訂介面來支援變更資料。 此方法會在傳入為引數的IDebugProperty2pDebugProperty介面上尋找自訂介面。
支援類型視覺化器和自訂檢視器
EE 可以在 GetCustomViewerCount 和 GetCustomViewerList 方法中支援類型視覺化檢視器和自訂檢視器。 首先,EE 會將它所提供的自訂檢視器數目新增至 GetCustomViewerCount 方法所傳回的值。 其次,EE 會將自己的自訂檢視器附加至 GetCustomViewerList 方法所傳回的清單。