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


Метод IMetaDataEmit::SetClassLayout

Завершает макет полей для класса, определенного предыдущим вызовом метода 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::D efineTypeDef и указания одного из трех макетов для полей класса: автоматический, последовательный или явный. Как правило, вы используете автоматический макет и позволяете среде выполнения выбрать оптимальный способ размещения полей.

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

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

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

Требования

Платформы: см. раздел Требования к системе.

Заголовка: Cor.h

Библиотека: Используется в качестве ресурса в MSCorEE.dll

версии платформа .NET Framework: доступно с версии 1.0.

См. также раздел