Метод 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