ICorProfilerInfo2::GetFunctionInfo2 方法

获取每个类型参数或某个函数(如果存在)的父类、元数据标记和 ClassID

语法

HRESULT GetFunctionInfo2(  
    [in]  FunctionID funcId,  
    [in]  COR_PRF_FRAME_INFO frameInfo,  
    [out] ClassID *pClassId,  
    [out] ModuleID *pModuleId,  
    [out] mdToken *pToken,  
    [in]  ULONG32 cTypeArgs,  
    [out] ULONG32 *pcTypeArgs,  
    [out] ClassID typeArgs[]);  

参数

funcId
[in] 要获取其父类和其他信息的函数的 ID。

frameInfo
[in] 一个 COR_PRF_FRAME_INFO 值,该值指向有关堆栈帧的信息。

pClassId
[out] 一个指向函数的父类的指针。

pModuleId
[out] 一个指向在其中定义函数父类的模块的指针。

pToken
[out] 指向函数的元数据标记的指针。

cTypeArgs
[in] typeArgs 数组的大小。

pcTypeArgs
[out] 一个指向 ClassID 值的总数的指针。

typeArgs
[out] 一个由 ClassID 值构成的数组,其中的每个值都是函数的类型参数的 ID。 方法返回时,typeArgs 将包含部分或全部 ClassID 值。

注解

探查器代码可调用 ICorProfilerInfo::GetModuleMetaData 以获取给定模块的元数据接口。 然后,返回到 pToken 所引用位置的元数据标记便可用于访问该函数的元数据。

通过 pClassIdtypeArgs 参数返回的类 ID 和类型参数取决于传入 frameInfo 参数的值,如下表中所示。

frameInfo 参数的值 结果
FunctionEnter2 回调中获得的 COR_PRF_FRAME_INFO pClassId 所引用位置中返回的 ClassID 以及在 typeArgs 数组中返回的所有类型参数都将是准确的。
FunctionEnter2 回调以外的源中获得的 COR_PRF_FRAME_INFO 无法确定准确的 ClassID 和类型参数。 也就是说,ClassID 可能为 NULL,并且某些类型参数可能作为 Object 返回。
无法确定准确的 ClassID 和类型参数。 也就是说,ClassID 可能为 NULL,并且某些类型参数可能作为 Object 返回。

GetFunctionInfo2 返回后,必须验证 typeArgs 缓冲区是否足够大,可包含所有 ClassID 值。 为此,请比较 pcTypeArgs 指向的值和 cTypeArgs 参数的值。 如果 pcTypeArgs 指向大于cTypeArgs 除以 ClassID 值大小的值,请分配更大的 pcTypeArgs 缓冲区,使用新的、更大的大小更新 cTypeArgs,然后再次调用 GetFunctionInfo2

或者,可以先用长度为零的 pcTypeArgs 缓冲区调用 GetFunctionInfo2 以获取正确的缓冲区大小。 然后,可将缓冲区大小设置为 pcTypeArgs 中返回的值除以 ClassID 值的大小,然后再次调用 GetFunctionInfo2

要求

平台:请参阅系统要求

头文件: CorProf.idl、CorProf.h

库:CorGuids.lib

.NET Framework 版本:自 2.0 起可用

另请参阅