Compartir a través de


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

Se llama al método CastToPreferredRuntimeType cada vez que un cliente desea intentar convertir de una instancia de tipo estático al tipo en tiempo de ejecución de esa instancia. Si el objeto en cuestión admite (a través de uno de sus modelos primarios adjuntos), se llamará a este método para realizar la conversión. Este método puede devolver el objeto original (no hay ninguna conversión o no se pudo analizar), devolver una nueva instancia del tipo en tiempo de ejecución, producir un error por motivos no semánticos (por ejemplo: sin memoria) o devolver E_NOT_SET. El código de error de E_NOT_SET es un código de error muy especial que indica al modelo de datos que la implementación no desea invalidar el comportamiento predeterminado y que el modelo de datos debe revertir a cualquier análisis que realice el host de depuración (por ejemplo: análisis de RTTI, examen de la forma de las tablas de funciones virtuales, etc...)

Sintaxis

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

Parámetros

contextObject

Objeto de instancia con tipo estático (este puntero) para el que se va a realizar el análisis y se intenta reducir la difusión al tipo en tiempo de ejecución.

object

Si se ha producido una conversión a un tipo en tiempo de ejecución, se trata de una nueva instancia con el tipo en tiempo de ejecución. Si no se pudo realizar el análisis o no se ha producido ningún cambio en el tipo, puede ser el objeto original.

Valor devuelto

Este método devuelve HRESULT que indica éxito o error.

Comentarios

Implementación de ejemplo:

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
Header dbgmodel.h

Consulte también

Interfaz IPreferredRuntimeTypeConcept