Share via


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::DefineTypeDef メソッドを呼び出し、クラスのフィールドに対して 3 つのレイアウト (自動、シーケンシャル、明示的) のいずれかを指定します。 通常は、自動レイアウトを使用し、フィールドをレイアウトする最適な方法がランタイムにより選択されるようにします。

ただし、アンマネージド コードにより使用される配置に従って、フィールドをレイアウトすることが必要になる場合があります。 その場合は、シーケンシャルまたは明示的なレイアウトを選択し、SetClassLayout を呼び出してフィールドのレイアウトを完了します。

  • シーケンシャル レイアウト: パッキング サイズを指定します。 フィールドは、自然なサイズまたはパッキング サイズのいずれかに従って整列されます。どちらの場合も、フィールドのオフセットは小さくなります。 rFieldOffsetsulClassSize を 0 に設定します。

  • 明示的なレイアウト: 各フィールドのオフセットを指定するか、クラスのサイズとパッキング サイズを指定します。

必要条件

:システム要件」を参照してください。

ヘッダー: Cor.h

ライブラリ: MSCorEE.dll でリソースとして使用されます

.NET Framework のバージョン: 1.0 以降で使用可能

関連項目