次の方法で共有


データの視覚化と表示

型のビジュアライザーとカスタム ビューアーは、開発者にとってすぐに意味がわかる方法でデータを表示します。 式エバリュエーター (EE) では、サードパーティの型のビジュアライザーをサポートするだけでなく、独自のカスタム ビューアーを指定することもできます。

Visual Studio は、GetCustomViewerCount メソッドを呼び出すことによって、オブジェクトの型に関連付けられている型のビジュアライザーとカスタム ビューアーの数を決定します。 少なくとも 1 つの型のビジュアライザーまたはカスタム ビューアーが使用可能な場合、Visual Studio は GetCustomViewerList メソッドを呼び出して、それらのビジュアライザーとビューアーの一覧 (実際にはビジュアライザーとビューアーを実装するものの一覧) を取得し、ユーザーに提示します。

型のビジュアライザーのサポート

型のビジュアライザーをサポートするために EE が実装する必要があるインターフェイスは多数あります。 これらのインターフェイスは、2 つの広範なカテゴリ (型のビジュアライザーを一覧表示するインターフェイスと、プロパティ データにアクセスするインターフェイス) に分類できます。

型のビジュアライザーの一覧表示

EE は、IDebugProperty3::GetCustomViewerCount および IDebugProperty3::GetCustomViewerList の実装における型のビジュアライザーの一覧表示をサポートしています。 これらのメソッドは、対応するメソッド GetCustomViewerCountGetCustomViewerList に呼び出しを渡します。

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 を追加します。