IDebugCustomViewer
Essa interface permite que um avaliador de expressão (EE) para exibir um valor de propriedade em qualquer formato que é necessário.
IDebugCustomViewer : IUknown
Observações para Implementadores
Um EE implementa essa interface para exibir um valor de propriedade em um formato personalizado.
Observações para chamadores
Uma chamada para COM CoCreateInstance função instancia nesta interface. O CLSID passado para CoCreateInstance é obtido do registro. Uma chamada para IDebugProperty3::GetCustomViewerList obtém o local no registro. Consulte os comentários para obter detalhes, bem como o exemplo.
Métodos na ordem de Vtable
Essa interface implementa o método a seguir:
Método |
Descrição |
---|---|
Faz o que for necessário para exibir um determinado valor. |
Comentários
Essa interface é usada quando um valor de propriedade não pode ser exibido por meios normais — por exemplo, com uma tabela de dados ou outro tipo de propriedade complexa. Um visualizador personalizado, como representado pela IDebugCustomViewer interface, é diferente de um visualizador de tipo, o que é um programa externo para exibir dados de um tipo específico, independentemente do EE. O EE implementa um visualizador personalizado que é específico para aquele EE. Um usuário seleciona o tipo de visualizador para usar, seja ele um visualizador de tipo ou um visualizador personalizado. Consulte Visualizando e exibição de dados para obter detalhes sobre esse processo.
Um visualizador personalizado é registrado da mesma forma como um EE e, portanto, requer uma linguagem GUID e um GUID de fornecedor. A métrica exata (ou o nome da entrada do registro) é conhecida apenas o EE. Essa métrica é retornada na DEBUG_CUSTOM_VIEWER estrutura, que por sua vez, é retornada por uma chamada para IDebugProperty3::GetCustomViewerList. O valor armazenado na métrica é o CLSID que o passado do COM CoCreateInstance funcionar (veja o exemplo).
O SDK auxiliares para depuração função, SetEEMetric, pode ser usado para registrar um visualizador personalizado. Consulte a seção do Registro "Avaliadores de expressão" Debugging SDK Helpers para chaves de registro específico que precisa de um visualizador personalizado. Observe que um visualizador personalizado precisa de uma só medida (que é definida pelas implementador do EE) enquanto um avaliador de expressão exige várias medidas predefinidas.
Normalmente, um visualizador personalizado fornece um modo de exibição somente leitura dos dados, já que o IDebugProperty3 interface é fornecida ao IDebugCustomViewer::DisplayValue não possui métodos para alterar o valor da propriedade, exceto como uma seqüência de caracteres. Para oferecer suporte a alteração arbitrários blocos de dados, o EE implementa uma interface personalizada no mesmo objeto que implementa o IDebugProperty3 interface. Essa interface personalizada forneceriam então os métodos necessários para alterar um bloco arbitrário de dados.
Requisitos
Cabeçalho: msdbg.h
Namespace: Microsoft.VisualStudio.Debugger.Interop
Assembly: Microsoft.VisualStudio.Debugger.Interop.dll
Exemplo
Este exemplo mostra como obter o visualizador personalizado primeiro de uma propriedade, se essa propriedade tem qualquer visualizadores personalizados.
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);
}
Consulte também
Referência
IDebugProperty3::GetCustomViewerList