次の方法で共有


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

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

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

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

Requirements

プラットフォーム:サポートされている .NET オペレーティング システムを参照してください。

Header: Cor.h

Library: CorGuids.lib

See also