IPreferredRuntimeTypeConcept::CastToPreferredRuntimeType 方法 (dbgmodel.h)

每当客户端尝试从静态类型实例转换为该实例的运行时类型时,都将调用 CastToPreferredRuntimeType 方法。 如果相关对象支持通过其附加父模型之一 () 首选运行时类型概念,则将调用此方法来执行转换。 此方法可能返回原始对象 (没有转换,或者无法分析) 、返回运行时类型的新实例、由于非语义原因 (失败,例如:内存不足) 或返回E_NOT_SET。 E_NOT_SET错误代码是一个非常特殊的错误代码,它向数据模型指示实现不希望重写默认行为,并且数据模型应回退到调试主机 (执行的任何分析,例如:RTTI 分析、检查虚拟函数表的形状、 等。。。)

语法

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

参数

contextObject

静态类型化实例对象 (此指针) 执行分析并尝试向下转换到运行时类型。

object

如果转换为运行时类型,则这是根据运行时类型键入的新实例。 如果无法执行分析或类型没有更改,则可能是原始对象。

返回值

此方法返回指示成功或失败的 HRESULT。

注解

示例实现:

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

要求

要求
Header dbgmodel.h

另请参阅

IPreferredRuntimeTypeConcept 接口