Partager via


IPreferredRuntimeTypeConcept ::CastToPreferredRuntimeType, méthode (dbgmodel.h)

La méthode CastToPreferredRuntimeType est appelée chaque fois qu’un client souhaite tenter de convertir d’une instance de type statique en type d’exécution de cette instance. Si l’objet en question prend en charge (via l’un de ses modèles parents attachés) le concept de type d’exécution préféré, cette méthode est appelée pour effectuer la conversion. Cette méthode peut renvoyer l’objet d’origine (il n’y a pas de conversion ou il n’a pas pu être analysé), retourner une nouvelle instance du type d’exécution, échouer pour des raisons non sémantiques (par exemple : absence de mémoire) ou retourner E_NOT_SET. Le code d’erreur E_NOT_SET est un code d’erreur très spécial qui indique au modèle de données que l’implémentation ne souhaite pas remplacer le comportement par défaut et que le modèle de données doit revenir à l’analyse effectuée par l’hôte de débogage (par exemple : analyse RTTI, examen de la forme des tables de fonctions virtuelles, etc...)

Syntaxe

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

Paramètres

contextObject

Objet d’instance typé statiquement (ce pointeur) pour lequel effectuer l’analyse et tenter de descendre en fonction du type d’exécution.

object

Si une conversion vers un type d’exécution s’est produite, il s’agit d’une nouvelle instance typée en fonction du type d’exécution. Si l’analyse n’a pas pu être effectuée ou qu’aucune modification n’a été apportée au type, il peut s’agir de l’objet d’origine.

Valeur de retour

Cette méthode retourne HRESULT qui indique la réussite ou l’échec.

Remarques

exemple d’implémentation :

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;
}

Exigences

Exigence Valeur
d’en-tête dbgmodel.h

Voir aussi

interface IPreferredRuntimeTypeConcept