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 |