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 指向的值与 COR_FIELD_OFFSET 结构的大小除以 rFieldOffset 大小所得的值进行比较。 如果 rFieldOffset 不够大,则分配更大的 rFieldOffset 缓冲区,用新的、更大的大小来更新 cFieldOffset并再次调用 GetClassLayout

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

要求

平台:请参阅系统要求

头文件: CorProf.idl、CorProf.h

库:CorGuids.lib

.NET Framework 版本:自 2.0 起可用

另请参阅