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