ICorProfilerInfo2::GetClassLayout 方法

获取有关由指定类定义的字段在内存中的布局的信息。 即,此方法获取该类的字段的偏移量。

HRESULT GetClassLayout(
    [in]  ClassID classID,
    [in, out] COR_FIELD_OFFSET rFieldOffset[],
    [in]  ULONG cFieldOffset,
    [out] ULONG *pcFieldOffset,
    [out] ULONG *pulClassSize);

参数

  • classID
    [in] 将检索其布局的类的 ID。

  • rFieldOffset
    [in, out] 一个由 COR_FIELD_OFFSET 结构组成的数组,其中每个结构都包含类的字段的标记和偏移量。

  • cFieldOffset
    [in] rFieldOffset 数组的大小。

  • pcFieldOffset
    [out] 一个指向可用元素总数的指针。 如果 cFieldOffset 为 0,此值将指示所需元素的数量。

  • pulClassSize
    [out] 一个指针,它指向包含类的大小(以字节为单位)的位置。

备注

GetClassLayout 方法仅返回类本身所定义的字段。 如果类的父类也定义了字段,则探查器必须对该父类调用 GetClassLayout 才能获取这些字段。

如果将 GetClassLayout 与字符串类一起使用,则该方法将失败,错误代码为 E_INVALIDARG。 使用 ICorProfilerInfo2::GetStringLayout 获取有关字符串布局的信息。 使用数组类调用时,GetClassLayout 也将失败。

GetClassLayout 返回后,您必须验证 rFieldOffset 缓冲区是否足够大以包含所有可用的 COR_FIELD_OFFSET 结构。 为此,请将 pcFieldOffset 指向的值与 rFieldOffset 的大小除以 COR_FIELD_OFFSET 结构的大小所得的商进行比较。 如果 rFieldOffset 不足够大,请分配更大的 rFieldOffset 缓冲区,用新的、更大的大小更新 cFieldOffset,然后再次调用 GetClassLayout

或者,您可以首先用长度为零的 rFieldOffset 缓冲区调用 GetClassLayout,以获取正确的缓冲区大小。 然后,您可以将缓冲区大小设置为 pcFieldOffset 中返回的值,然后再次调用 GetClassLayout

有关这两种方法的更多信息,请参见分析 API 方法约定

要求

**平台:**请参见 .NET Framework 系统要求

**头文件:**CorProf.idl、CorProf.h

**库:**CorGuids.lib

**.NET Framework 版本:**4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

请参见

参考

ICorProfilerInfo 接口

ICorProfilerInfo2 接口

其他资源

分析接口

分析(非托管 API 参考)