次の方法で共有


ICorProfilerInfo2::GetClassLayout Method

指定したクラスによって定義されたフィールドのレイアウトに関する情報をメモリ内で取得します。 つまり、このメソッドはクラスのフィールドのオフセットを取得します。

Syntax

HRESULT GetClassLayout(
    [in]  ClassID classID,
    [in, out] COR_FIELD_OFFSET rFieldOffset[],
    [in]  ULONG cFieldOffset,
    [out] ULONG *pcFieldOffset,
    [out] ULONG *pulClassSize);

Parameters

classID [in]レイアウトを取得するクラスの ID。

rFieldOffset [入力、出力] COR_FIELD_OFFSET 構造体の配列。各構造体には、クラスのフィールドのトークンとオフセットが含まれます。

cFieldOffset [in] rFieldOffset 配列のサイズ。

pcFieldOffset [out]使用可能な要素の合計数へのポインター。 cFieldOffsetが 0 の場合、この値は必要な要素の数を示します。

pulClassSize [out]クラスのサイズ (バイト単位) を含む場所へのポインター。

Remarks

GetClassLayout メソッドは、クラス自体によって定義されたフィールドのみを返します。 クラスの親クラスにもフィールドが定義されている場合、プロファイラーは親クラスの GetClassLayout を呼び出してそれらのフィールドを取得する必要があります。

文字列クラスで GetClassLayout を使用すると、エラー コード E_INVALIDARGでメソッドが失敗します。 ICorProfilerInfo2::GetStringLayout を使用して、文字列のレイアウトに関する情報を取得します。 GetClassLayout は、配列クラスで呼び出されたときにも失敗します。

GetClassLayoutが返されたら、使用可能なすべてのCOR_FIELD_OFFSET構造体を格納するのに十分な大きさのrFieldOffset バッファーが存在することを確認する必要があります。 これを行うには、 pcFieldOffset が指す値を、 rFieldOffset のサイズを COR_FIELD_OFFSET 構造体のサイズで割った値と比較します。 rFieldOffsetが十分な大きさでない場合は、より大きなrFieldOffset バッファーを割り当て、新しい大きなサイズでcFieldOffsetを更新し、GetClassLayoutを再度呼び出します。

または、最初に長さ 0 のGetClassLayout バッファーでrFieldOffsetを呼び出して、正しいバッファー サイズを取得することもできます。 その後、バッファー サイズを pcFieldOffset で返される値に設定し、 GetClassLayout を再度呼び出すことができます。

Requirements

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

ヘッダ: CorProf.idl、CorProf.h

Library: CorGuids.lib

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

See also