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


Метод 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 с пакетом обновления 1 (SP1), 3.5, 3.0 с пакетом обновления 1 (SP1), 3.0, 2.0 с пакетом обновления 1 (SP1), 2.0, 1.1, 1.0

См. также

Ссылки

Интерфейс IMetaDataEmit

Интерфейс IMetaDataEmit2