ICorProfilerInfo2::GetClassLayout 方法

更新:2007 年 11 月

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

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 用于字符串类时,该方法虽然不会失败,但它返回的数据将不正确。使用 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

**库:**CorGuids.lib

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

请参见

参考

ICorProfilerInfo

ICorProfilerInfo2

其他资源

分析接口

分析(非托管 API 参考)