データの視覚化と表示
型のビジュアライザーとカスタム ビューアーは、開発者にとってすぐに意味がわかる方法でデータを表示します。 式エバリュエーター (EE) では、サードパーティの型のビジュアライザーをサポートするだけでなく、独自のカスタム ビューアーを指定することもできます。
Visual Studio は、GetCustomViewerCount メソッドを呼び出すことによって、オブジェクトの型に関連付けられている型のビジュアライザーとカスタム ビューアーの数を決定します。 少なくとも 1 つの型のビジュアライザーまたはカスタム ビューアーが使用可能な場合、Visual Studio は GetCustomViewerList メソッドを呼び出して、それらのビジュアライザーとビューアーの一覧 (実際にはビジュアライザーとビューアーを実装するものの一覧) を取得し、ユーザーに提示します。
型のビジュアライザーのサポート
型のビジュアライザーをサポートするために EE が実装する必要があるインターフェイスは多数あります。 これらのインターフェイスは、2 つの広範なカテゴリ (型のビジュアライザーを一覧表示するインターフェイスと、プロパティ データにアクセスするインターフェイス) に分類できます。
型のビジュアライザーの一覧表示
EE は、IDebugProperty3::GetCustomViewerCount
および IDebugProperty3::GetCustomViewerList
の実装における型のビジュアライザーの一覧表示をサポートしています。 これらのメソッドは、対応するメソッド GetCustomViewerCount と GetCustomViewerList に呼び出しを渡します。
IEEVisualizerService は、CreateVisualizerService を呼び出すことによって取得されます。 このメソッドには、EvaluateSync に渡される IDebugBinder インターフェイスから取得される、IDebugBinder3 インターフェイスが必要です。 IEEVisualizerServiceProvider::CreateVisualizerService
には、IDebugParsedExpression::EvaluateSync
に渡された IDebugSymbolProvider および IDebugAddress インターフェイスも必要です。 IEEVisualizerService
インターフェイスを作成するために必要な最後のインターフェイスは、EE が実装する IEEVisualizerDataProvider インターフェイスです。 このインターフェイスを使用すると、視覚化されるプロパティに変更を加えることができます。 すべてのプロパティ データは IDebugObject インターフェイスにカプセル化されます。これは、EE によっても実装されます。
プロパティ データへのアクセス
プロパティ データへのアクセスは、IPropertyProxyEESide インターフェイスを介して行われます。 このインターフェイスを取得するために、Visual Studio では、プロパティ オブジェクトに対して QueryInterface を呼び出して、(IDebugProperty3 インターフェイスを実装するのと同じオブジェクトに実装されている) IPropertyProxyProvider インターフェイスを取得してから、GetPropertyProxy メソッドを呼び出して IPropertyProxyEESide
インターフェイスを取得します。
IPropertyProxyEESide
インターフェイスを出入りするすべてのデータは、IEEDataStorage インターフェイスにカプセル化されます。 このインターフェイスはバイトの配列を表し、Visual Studio と EE の両方によって実装されます。 プロパティのデータを変更すると、Visual Studio は、新しいデータを保持する IEEDataStorage
オブジェクトを作成し、後でプロパティのデータを更新するために InPlaceUpdateObject に渡される新しい IEEDataStorage
オブジェクトを取得するために、そのデータ オブジェクトで CreateReplacementObject を呼び出します。 IPropertyProxyEESide::CreateReplacementObject
により、EE で IEEDataStorage
インターフェイスを実装する独自のクラスをインスタンス化することができます。
カスタム ビューアーのサポート
フラグ DBG_ATTRIB_VALUE_CUSTOM_VIEWER
は、オブジェクトにカスタム ビューアーが関連付けられていることを示すために、DEBUG_PROPERTY_INFO 構造体 (GetPropertyInfo の呼び出しによって返されます) の dwAttrib
フィールドに設定されます。 このフラグが設定されている場合、Visual Studio は、QueryInterface を使用して IDebugProperty2 インターフェイスから IDebugProperty3 インターフェイスを取得します。
ユーザーがカスタム ビューアーを選択した場合、Visual Studio は、CLSID
メソッドによって提供されるビューアーの IDebugProperty3::GetCustomViewerList
を使用して、カスタム ビューアーをインスタンス化します。 その後、Visual Studio は、DisplayValue を呼び出してユーザーに値を示します。
通常、IDebugCustomViewer::DisplayValue
では、データの読み取り専用ビューが表示されます。 データの変更を許可するため、EE は、プロパティ オブジェクトのデータ変更をサポートするカスタム インターフェイスを実装する必要があります。 IDebugCustomViewer::DisplayValue
メソッドは、このカスタム インターフェイスを使用して、データの変更をサポートします。 このメソッドは、IDebugProperty2
引数として渡された pDebugProperty
インターフェイスでカスタム インターフェイスを検索します。
型のビジュアライザーとカスタム ビューアーの両方のサポート
EE は、GetCustomViewerCount および GetCustomViewerList メソッドで、型のビジュアライザーとカスタム ビューアーの両方をサポートできます。 まず、EE は、追加するカスタム ビューアーの数を、GetCustomViewerCount メソッドによって返される値に追加します。 次に、EE は、GetCustomViewerList メソッドによって返される一覧に、独自のカスタム ビューアーの CLSID
を追加します。