Bagikan melalui


Memvisualisasikan dan menampilkan data

Visualizer tipe dan penampil khusus menyajikan data dengan cara yang cepat dan bermakna bagi pengembang. Evaluator ekspresi (EE) dapat mendukung visualizer jenis pihak ketiga serta menyediakan penampil kustomnya sendiri.

Visual Studio menentukan berapa banyak jenis visualizer dan penampil kustom yang terkait dengan jenis objek dengan memanggil metode GetCustomViewerCount . Jika setidaknya ada satu jenis visualizer atau penampil kustom yang tersedia, Visual Studio memanggil fungsi GetCustomViewerList untuk mengambil daftar visualizer dan penampil tersebut (daftar yang mengimplementasikan visualizer dan penampil) dan menyajikannya kepada pengguna.

Visualizer tipe pendukung

Ada sejumlah antarmuka yang harus diterapkan EE untuk mendukung jenis visualizer. Antarmuka ini dapat dipecah menjadi dua kategori luas: antarmuka yang mencantumkan jenis visualizer dan antarmuka yang mengakses data properti.

Daftar Jenis Visualizer

EE mendukung pencantuman jenis visualizer dalam implementasinya di IDebugProperty3::GetCustomViewerCount dan IDebugProperty3::GetCustomViewerList. Metode ini meneruskan panggilan ke metode yang sesuai GetCustomViewerCount dan GetCustomViewerList.

IEEVisualizerService diperoleh dengan memanggil CreateVisualizerService. Metode ini memerlukan antarmuka IDebugBinder3, yang diperoleh dari antarmuka IDebugBinder yang diteruskan ke EvaluateSync. IEEVisualizerServiceProvider::CreateVisualizerService juga memerlukan antarmuka IDebugSymbolProvider dan IDebugAddress , yang diteruskan ke IDebugParsedExpression::EvaluateSync. Antarmuka akhir yang diperlukan untuk membuat IEEVisualizerService antarmuka adalah antarmuka IEEVisualizerDataProvider , yang diterapkan EE. Antarmuka ini memungkinkan perubahan dilakukan pada properti yang sedang divisualisasikan. Semua data properti dienkapsulasi dalam antarmuka IDebugObject , yang juga diimplementasikan oleh EE.

Mengakses data properti

Mengakses data properti dilakukan melalui antarmuka IPropertyProxyEESide . Untuk mendapatkan antarmuka ini, Visual Studio memanggil QueryInterface pada objek properti untuk mendapatkan antarmuka IPropertyProxyProvider (diimplementasikan pada objek yang sama yang mengimplementasikan antarmuka IDebugProperty3 ) dan kemudian memanggil metode GetPropertyProxy untuk mendapatkan IPropertyProxyEESide antarmuka.

Semua data yang diteruskan ke dalam dan ke luar IPropertyProxyEESide antarmuka dienkapsulasi di antarmuka IEEDataStorage . Antarmuka ini mewakili array byte dan diimplementasikan oleh Visual Studio dan EE. Saat data properti akan diubah, Visual Studio membuat objek yang IEEDataStorage menyimpan data baru dan memanggil CreateReplacementObject dengan objek data tersebut untuk mendapatkan objek baru IEEDataStorage yang, pada gilirannya, diteruskan ke InPlaceUpdateObject untuk memperbarui data properti. IPropertyProxyEESide::CreateReplacementObject memungkinkan EE untuk membuat instans kelasnya sendiri yang mengimplementasikan IEEDataStorage antarmuka.

Mendukung penampil khusus

Bendera DBG_ATTRIB_VALUE_CUSTOM_VIEWER diatur di dwAttrib bidang struktur DEBUG_PROPERTY_INFO (dikembalikan oleh panggilan ke GetPropertyInfo) untuk menunjukkan bahwa objek memiliki penampil kustom yang terkait dengannya. Saat bendera ini diatur, Visual Studio mendapatkan antarmuka IDebugProperty3 dari antarmuka IDebugProperty2 menggunakan QueryInterface.

Jika pengguna memilih penampil kustom, Visual Studio membuat instans penampil kustom menggunakan penampil CLSID yang disediakan oleh IDebugProperty3::GetCustomViewerList metode . Visual Studio kemudian memanggil DisplayValue untuk menampilkan nilai kepada pengguna.

Biasanya, IDebugCustomViewer::DisplayValue menyajikan tampilan data baca-saja. Untuk mengizinkan perubahan pada data, EE harus menerapkan antarmuka kustom yang mendukung perubahan data pada objek properti. Metode ini IDebugCustomViewer::DisplayValue menggunakan antarmuka kustom ini untuk mendukung perubahan data. Metode mencari antarmuka kustom pada antarmuka yang IDebugProperty2 diteruskan sebagai pDebugProperty argumen.

Mendukung visualizer tipe dan penampil kustom

EE dapat mendukung jenis visualizer dan penampil kustom di metode GetCustomViewerCount dan GetCustomViewerList . Pertama, EE menambahkan jumlah penampil kustom yang disediakannya ke nilai yang dikembalikan oleh metode GetCustomViewerCount . Kedua, EE menambahkan pemirsa kustom sendiri ke daftar yang dikembalikan oleh metode GetCustomViewerList.