共用方式為


視覺化及檢視資料

型別視覺化檢視和自訂檢視會快速以對開發人員具有意義的方式呈現資料。 運算式評估工具 (EE) 可以支援第三方型別視覺化檢視,並提供自己的自訂檢視器。

Visual Studio 會呼叫 GetCustomViewerCount 方法,判斷有多少型別視覺化檢視和自訂檢視器與物件的類型相關聯。 如果至少有一個型別視覺化檢視或自訂檢視器可用,Visual Studio 會呼叫 GetCustomViewerList 方法來擷取這些視覺化檢視和檢視器的清單 (實際上,實作視覺化檢視和檢視器的清單),並將其呈現給使用者。

支援型別視覺化檢視

EE 必須實作數個介面以支援型別視覺化檢視。 這些介面可以分成兩個廣泛的類別:列出型別視覺化檢視的介面,以及存取屬性資料的介面。

列出型別視覺化檢視

EE 支援在 IDebugProperty3::GetCustomViewerCountIDebugProperty3::GetCustomViewerList 的實作中列出型別視覺化檢視。 這些方法會將呼叫傳遞至相對應的方法 GetCustomViewerCountGetCustomViewerList

IEEVisualizerService 是藉由呼叫 CreateVisualizerService 來取得。 這個方法需要 IDebugBinder3 介面,這是從傳遞至 EvaluateSyncIDebugBinder 介面取得的。 IEEVisualizerServiceProvider::CreateVisualizerService 也需要 IDebugSymbolProviderIDebugAddress 介面,這些會傳遞至 IDebugParsedExpression::EvaluateSync。 建立 IEEVisualizerService 介面所需的最後介面是 EE 實作的 IEEVisualizerDataProvider 介面。 這個介面允許對要視覺化的屬性進行變更。 所有屬性資料都會封裝在 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 是在 DEBUG_PROPERTY_INFO 結構的 dwAttrib 欄位中設定的 (透過對 GetPropertyInfo 的呼叫傳回),表示物件具有與其相關聯的自訂檢視器。 設定此旗標時,Visual Studio 會使用 QueryInterfaceIDebugProperty2 介面取得 IDebugProperty3 介面。

如果使用者選取自訂檢視器,Visual Studio 會使用 IDebugProperty3::GetCustomViewerList 方法所提供之檢視器的 CLSID 來具現化自訂檢視器。 Visual Studio 接著會呼叫 DisplayValue,向使用者顯示該值。

通常,IDebugCustomViewer::DisplayValue 會呈現資料的唯讀檢視。 若要允許變更資料,EE 必須實作支援在屬性物件上變更資料的自訂介面。 IDebugCustomViewer::DisplayValue 方法會使用此自訂介面來支援變更資料。 該方法會尋找做為 pDebugProperty 引數傳入之 IDebugProperty2 介面上的自訂介面。

同時支援型別視覺化檢視和自訂檢視器

EE 可以在 GetCustomViewerCountGetCustomViewerList 方法中同時支援型別視覺化檢視和自訂檢視器。 首先,EE 會將它提供的自訂檢視器數目增加到 GetCustomViewerCount 方法所傳回的值。 其次,EE 會將自己的自訂檢視器的 CLSID 附加至 GetCustomViewerList 方法所傳回的清單。