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 |