Compartilhar via


Método IPreferredRuntimeTypeConcept::CastToPreferredRuntimeType (dbgmodel.h)

O método CastToPreferredRuntimeType é chamado sempre que um cliente deseja tentar converter de uma instância de tipo estático para o tipo de runtime dessa instância. Se o objeto em questão der suporte (por meio de um de seus modelos pai anexados) ao conceito de tipo de runtime preferencial, esse método será chamado para executar a conversão. Esse método pode retornar o objeto original (não há conversão ou não pôde ser analisado), retornar uma nova instância do tipo de runtime, falhar por motivos não semânticos (por exemplo, falta de memória) ou retornar E_NOT_SET. O código de erro E_NOT_SET é um código de erro muito especial que indica ao modelo de dados que a implementação não deseja substituir o comportamento padrão e que o modelo de dados deve voltar para qualquer análise executada pelo host de depuração (por exemplo: análise RTTI, exame da forma das tabelas de funções virtuais, etc...)

Sintaxe

HRESULT CastToPreferredRuntimeType(
  IModelObject                *contextObject,
  _COM_Errorptr_ IModelObject **object
);

Parâmetros

contextObject

O objeto de instância tipado estaticamente (este ponteiro) para o qual executar a análise e tentar reduzir para o tipo de runtime.

object

Se ocorrer uma conversão em um tipo de runtime, essa será uma nova instância digitada de acordo com o tipo de runtime. Se a análise não pôde ser executada ou não houve alteração no tipo, esse pode ser o objeto original.

Retornar valor

Esse método retorna HRESULT que indica êxito ou falha.

Comentários

Implementação de exemplo:

IFACEMETHOD(CastToPreferredRuntimeType)(_In_ IModelObject *pContextObject, 
                                        _COM_Outptr_ IModelObject **ppRuntimeObject)
{
    HRESULT hr = S_OK;
    *ppRuntimeObject = nullptr;

    ComPtr<IModelObject> spRuntimeObject;

    // Imagine this was on a class for a data model registered against some 
    // IFoo type where IFoo was always backed by CFoo (the type of which is 
    // stored in m_spType) and the offset between IFoo and CFoo was m_runtimeOffset.
    Location loc;
    hr = pContextObject->GetLocation(&loc);
    if (SUCCEEDED(hr))
    {
        loc.Offset -= m_runtimeOffset;

        // By passing 'nullptr' as the context, it will inherit its context 
        // from the passed type.  Sufficient for *THIS* purpose in *MOST* cases.
        hr = GetManager()->CreateTypedObject(nullptr, 
                                             loc, 
                                             m_spType.Get(), 
                                             &spRuntimeObject);
    }

    if (SUCCEEDED(hr))
    {
        *ppRuntimeObject = spRuntimeObject.Detach();
    }

    return hr;
}

Requisitos

Requisito Valor
Cabeçalho dbgmodel.h

Confira também

Interface IPreferredRuntimeTypeConcept