Freigeben über


IPreferredRuntimeTypeConcept::CastToPreferredRuntimeType-Methode (dbgmodel.h)

Die CastToPreferredRuntimeType-Methode wird immer dann aufgerufen, wenn ein Client versuchen möchte, von einem statischen Typ instance in den Laufzeittyp dieses instance 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 durchzuführen. Diese Methode kann entweder das ursprüngliche Objekt zurückgeben (es gibt keine Konvertierung oder es konnte nicht analysiert werden), gibt eine neue instance des Laufzeittyps zurück, schlägt aus nicht semantischen Gründen fehl (z. B. nicht genügend Arbeitsspeicher) oder gibt E_NOT_SET zurück. Der E_NOT_SET Fehlercode ist ein sehr spezieller Fehlercode, der dem Datenmodell angibt, dass die Implementierung das Standardverhalten nicht überschreiben 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, etc...)

Syntax

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

Parameter

contextObject

Der statisch typisierte instance -Objekt (dieser Zeiger), für das eine Analyse durchgeführt und versucht wird, auf den Laufzeittyp herabzuschneiden.

object

Wenn eine Konvertierung in einen Laufzeittyp erfolgt ist, handelt es sich um eine neue instance, die gemäß dem Laufzeittyp typisiert wurde. Wenn die Analyse nicht durchgeführt werden konnte oder keine Typänderung aufgetreten ist, kann dies das ursprüngliche Objekt sein.

Rückgabewert

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

Hinweise

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

Weitere Informationen

IPreferredRuntimeTypeConcept-Schnittstelle