Поделиться через


IMetaDataEmit::SetClassLayout Method

Завершает макет полей для класса, определенного перед вызовом метода DefineTypeDef.

Syntax

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

Parameters

td [in] Маркер, указывающий mdTypeDef класс, который нужно выложить.

dwPackSize [in] Размер упаковки: 1, 2, 4, 8 или 16 байт. Размер упаковки — это количество байтов между соседними полями.

rFieldOffsets [in] Массив структур COR_FIELD_OFFSET , каждый из которых задает поле класса и смещение поля в классе. Завершите массив с mdTokenNilпомощью .

ulClassSize [in] Размер класса в байтах.

Remarks

Класс изначально определяется путем вызова метода IMetaDataEmit::D efineTypeDef и указания одного из трех макетов для полей класса: автоматического, последовательного или явного. Как правило, вы будете использовать автоматический макет и позволите среде выполнения выбрать оптимальный способ размещения полей.

Однако может потребоваться, чтобы поля, изложенные в соответствии с расположением, который использует неуправляемый код. В этом случае выберите последовательный или явный макет и вызов SetClassLayout , чтобы завершить макет полей:

  • Последовательный макет: укажите размер упаковки. Поле выравнивается в соответствии с его естественным размером или размером упаковки, в зависимости от того, что приводит к меньшему смещение поля. Задайте rFieldOffsets и ulClassSize равное нулю.

  • Явный макет: укажите смещение каждого поля или укажите размер класса и размер упаковки.

Requirements

Платформ: См. сведения о поддерживаемых операционных системах .NET.

Header: Cor.h

Library: CorGuids.lib

See also