Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Antarmuka ini memungkinkan evaluator ekspresi (EE) untuk menampilkan nilai properti dalam format apa pun yang diperlukan.
Sintaks
IDebugCustomViewer : IUknown
Catatan untuk Pelaksana
EE mengimplementasikan antarmuka ini untuk menampilkan nilai properti dalam format kustom.
Catatan untuk Penelepon
Panggilan ke fungsi COM membuat CoCreateInstance instans antarmuka ini. Yang CLSID diteruskan ke CoCreateInstance diperoleh dari registri. Panggilan ke GetCustomViewerList mendapatkan lokasi di registri. Lihat Keterangan untuk detail serta Contoh.
Metode dalam Urutan Vtable
Antarmuka ini mengimplementasikan metode berikut:
| Metode | Deskripsi |
|---|---|
| DisplayValue | Melakukan apa pun yang diperlukan untuk menampilkan nilai tertentu. |
Keterangan
Antarmuka ini digunakan ketika nilai properti tidak dapat ditampilkan dengan cara normal—misalnya, dengan tabel data atau jenis properti kompleks lainnya. Penampil kustom, seperti yang diwakili oleh IDebugCustomViewer antarmuka, berbeda dari penampil visual jenis, yang merupakan program eksternal untuk menampilkan data dari jenis tertentu terlepas dari EE. EE mengimplementasikan penampil kustom yang khusus untuk EE tersebut. Pengguna memilih jenis visualizer mana yang akan digunakan, baik itu penampil visual jenis atau penampil kustom. Lihat Memvisualisasikan dan Menampilkan Data untuk detail tentang proses ini.
Penampil kustom terdaftar dengan cara yang sama seperti EE dan, oleh karena itu, memerlukan GUID bahasa dan GUID vendor. Metrik yang tepat (atau nama entri registri) hanya diketahui oleh EE. Metrik ini dikembalikan dalam struktur DEBUG_CUSTOM_VIEWER , yang pada gilirannya dikembalikan oleh panggilan ke GetCustomViewerList. Nilai yang disimpan dalam metrik adalah CLSID yang diteruskan ke fungsi COM CoCreateInstance (lihat Contoh).
SDK Helpers untuk fungsi Debugging , SetEEMetric, dapat digunakan untuk mendaftarkan penampil kustom. Lihat bagian Debugging SDK Helpers registri "Evaluator Ekspresi" untuk kunci registri tertentu yang dibutuhkan penampil kustom. Perhatikan bahwa penampil kustom hanya memerlukan satu metrik (yang ditentukan oleh pelaksana EE) sedangkan evaluator ekspresi memerlukan beberapa metrik yang telah ditentukan sebelumnya.
Biasanya, penampil kustom menyediakan tampilan data baca-saja, karena antarmuka IDebugProperty3 yang disediakan ke DisplayValue tidak memiliki metode untuk mengubah nilai properti kecuali sebagai string. Untuk mendukung perubahan blok data arbitrer, EE mengimplementasikan antarmuka kustom pada objek yang sama yang mengimplementasikan IDebugProperty3 antarmuka. Antarmuka kustom ini kemudian akan menyediakan metode yang diperlukan untuk mengubah blok data arbitrer.
Persyaratan
Header: msdbg.h
Namespace: Microsoft.VisualStudio.Debugger.Interop
Rakitan: Microsoft.VisualStudio.Debugger.Interop.dll
Contoh
Contoh ini menunjukkan cara mendapatkan penampil kustom pertama dari properti jika properti tersebut memiliki penampil kustom.
IDebugCustomViewer *GetFirstCustomViewer(IDebugProperty2 *pProperty)
{
// This string is typically defined globally. For this example, it
// is defined here.
static const WCHAR strRegistrationRoot[] = L"Software\\Microsoft\\VisualStudio\\8.0Exp";
IDebugCustomViewer *pViewer = NULL;
if (pProperty != NULL) {
CComQIPtr<IDebugProperty3> pProperty3(pProperty);
if (pProperty3 != NULL) {
HRESULT hr;
ULONG viewerCount = 0;
hr = pProperty3->GetCustomViewerCount(&viewerCount);
if (viewerCount > 0) {
ULONG viewersFetched = 0;
DEBUG_CUSTOM_VIEWER viewerInfo = { 0 };
hr = pProperty3->GetCustomViewerList(0,
1,
&viewerInfo,
&viewersFetched);
if (viewersFetched == 1) {
CLSID clsidViewer = { 0 };
CComPtr<IDebugCustomViewer> spCustomViewer;
// Get the viewer's CLSID from the registry.
::GetEEMetric(viewerInfo.guidLang,
viewerInfo.guidVendor,
viewerInfo.bstrMetric,
&clsidViewer,
strRegistrationRoot);
if (!IsEqualGUID(clsidViewer,GUID_NULL)) {
// Instantiate the custom viewer.
spCustomViewer.CoCreateInstance(clsidViewer);
if (spCustomViewer != NULL) {
pViewer = spCustomViewer.Detach();
}
}
}
}
}
}
return(pViewer);
}