IMetaDataEmit::SetClassLayout 方法

为以前通过调用 IMetaDataEmit::DefineTypeDef 方法 定义的类完成字段布局。

HRESULT SetClassLayout (
    [in]  mdTypeDef           td, 
    [in]  DWORD               dwPackSize, 
    [in]  COR_FIELD_OFFSET    rFieldOffsets[], 
    [in]  ULONG               ulClassSize 
);

参数

  • td
    [in] 一个指定要布局的类的 mdTypeDef 标记。

  • dwPackSize
    [in] 封装大小:1、2、4、8 或 16 字节。 封装大小是相邻字段之间的字节数。

  • rFieldOffsets
    [in] 一个由 COR_FIELD_OFFSET 结构组成的数组,其中的每个结构指定类的一个字段以及该字段在类中的偏移量。 用 mdTokenNil 终止该数组。

  • ulClassSize
    [in] 类的大小(以字节为单位)。

备注

类最初是通过调用 IMetaDataEmit::DefineTypeDef 方法并为其字段指定三种字段布局之一(自动、连续或显式)来定义的。 通常,您会使用自动布局,让运行时选择对字段进行布局的最佳方式。

但是,您可能希望字段根据非托管代码使用的排列来布局。 在这种情况下,请选择连续或显式布局,并调用 SetClassLayout 来完成字段布局:

  • 连续布局:指定封装大小。 字段根据其自然大小或封装大小来对齐,以使字段偏移量最小的大小为准。 将 rFieldOffsets 和 ulClassSize 设置为零。

  • 显式布局:指定每个字段的偏移量,或者指定类大小和封装大小。

要求

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

**头文件:**Cor.h

**库:**在 MsCorEE.dll 中用作资源

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

请参见

参考

IMetaDataEmit 接口

IMetaDataEmit2 接口