IDebugHostSymbols::GetMostDerivedObject 方法 (dbgmodel.h)
GetMostDerivedObject 将使用调试器的类型系统从对象的静态类型中确定对象的运行时类型。 此方法将仅使用类型系统层中提供的符号信息和启发式方法来执行此分析。 此类信息可能包括 C++ RTTI (运行时类型信息,) 或分析对象的虚拟函数表的形状。 它不包括 IModelObject 上的首选运行时类型概念等内容。
如果分析找不到运行时类型,或者找不到不同于传入方法的静态类型的运行时类型,则输入位置和类型可能会传出。由于这些原因, 方法不会失败。
语法
HRESULT GetMostDerivedObject(
IDebugHostContext *pContext,
Location location,
IDebugHostType *objectType,
Location *derivedLocation,
IDebugHostType **derivedType
);
参数
pContext
给定位置有效的上下文。 如果未指定此值,则将假定上下文与 objectType 给定的上下文相同。
location
静态类型化对象在 pContext 参数或 objectType 参数给定的地址空间中的位置。
objectType
给定位置处对象的静态类型。
derivedLocation
运行时类型化对象在 pContext 参数或 objectType 参数给定的地址空间中的位置。 这可能与 location 参数提供的位置相同,也可能不同。
derivedType
对象的运行时类型将在此处返回。 这可能与 objectType 参数中传递的类型相同,也可能不同。
返回值
此方法返回指示成功或失败的 HRESULT。
注解
示例代码
ComPtr<IDebugHost> spHost; /* get the host */
ComPtr<IDebugHostType> spStaticType; /* get the static (compile time) type of
some object (see IModelObject::GetTargetInfo) */
Location staticLocation; /* get the static location of some object
(see IModelObject::GetTargetInfo) */
ComPtr<IDebugHostSymbols> spSym;
if (SUCCEEDED(spHost.As(&spSym)))
{
ComPtr<IDebugHostType> spRuntimeType;
Location runtimeLocation;
if (SUCCEEDED(spSym->GetMostDerivedObject(USE_CURRENT_HOST_CONTEXT,
spStaticType.Get(),
staticLocation,
&spRuntimeType,
&runtimeLocation)))
{
// spRuntimeType contains the runtime type of the object as
// determined from type system means (e.g.: RTTI or v-table analysis)
// runtimeLocation contains the location of the runtime type of the object
}
}
要求
要求 | 值 |
---|---|
Header | dbgmodel.h |