Freigeben über


IPreferredRuntimeTypeConcept::CastToPreferredRuntimeType-Methode (dbgmodel.h)

Die CastToPreferredRuntimeType-Methode wird immer aufgerufen, wenn ein Client versuchen möchte, von einer statischen Typinstanz in den Laufzeittyp dieser Instanz zu konvertieren. Wenn das betreffende Objekt (über eines seiner angefügten übergeordneten Modelle) das bevorzugte Laufzeittypkonzept unterstützt, wird diese Methode aufgerufen, um die Konvertierung auszuführen. Diese Methode kann entweder das ursprüngliche Objekt zurückgeben (es gibt keine Konvertierung oder konnte nicht analysiert werden), eine neue Instanz des Laufzeittyps zurückgeben, aus nicht semantischen Gründen fehlschlagen (z. B. nicht genügend Arbeitsspeicher) oder E_NOT_SET zurückgeben. Der E_NOT_SET Fehlercode ist ein sehr spezieller Fehlercode, der für das Datenmodell angibt, dass die Implementierung das Standardverhalten nicht außer Kraft setzen möchte und dass das Datenmodell auf die vom Debughost durchgeführte Analyse zurückgreifen sollte (z. B. RTTI-Analyse, Untersuchung der Form der virtuellen Funktionstabellen, usw.

Syntax

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

Parameter

contextObject

Das statisch eingegebene Instanzobjekt (dieser Zeiger), für das Eine Analyse ausgeführt und versucht wird, den Laufzeittyp zu downcasten.

object

Wenn eine Konvertierung in einen Laufzeittyp aufgetreten ist, handelt es sich um eine neue Instanz, die gemäß dem Laufzeittyp eingegeben wird. Wenn die Analyse nicht ausgeführt werden konnte oder es keine Änderung des Typs gab, kann dies das ursprüngliche Objekt sein.

Rückgabewert

Diese Methode gibt HRESULT zurück, das Erfolg oder Fehler angibt.

Bemerkungen

Beispielimplementierung:

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

Anforderungen

Anforderung Wert
Header- dbgmodel.h

Siehe auch

IPreferredRuntimeTypeConcept-Schnittstelle