ICorProfilerInfo2::GetClassLayout メソッド
指定したクラスで定義されるフィールドのメモリ内レイアウトに関する情報を取得します。 つまり、このメソッドはクラスのフィールドのオフセットを取得します。
構文
HRESULT GetClassLayout(
[in] ClassID classID,
[in, out] COR_FIELD_OFFSET rFieldOffset[],
[in] ULONG cFieldOffset,
[out] ULONG *pcFieldOffset,
[out] ULONG *pulClassSize);
パラメーター
classID
[in] レイアウトを取得するクラスの ID。
rFieldOffset
[in, out] COR_FIELD_OFFSET 構造体の配列。それぞれにクラスのフィールドのトークンとオフセットが含まれています。
cFieldOffset
[in] rFieldOffset
配列のサイズ。
pcFieldOffset
[out] 使用できる要素の総数へのポインター。 cFieldOffset
が 0 である場合、この値は必要な要素の数を示します。
pulClassSize
[out] クラスのサイズ (バイト単位) を含む位置へのポインター。
解説
GetClassLayout
メソッドは、クラス自体によって定義されているフィールドのみを返します。 クラスの親クラスもフィールドを定義している場合、プロファイラーは親クラスで GetClassLayout
を呼び出してそのフィールドを取得する必要があります。
GetClassLayout
を文字列クラスと一緒に使用する場合、このメソッドは E_INVALIDARG というエラー コードで失敗します。 ICorProfilerInfo2::GetStringLayout を使用して、文字列のレイアウトに関する情報を取得します。 GetClassLayout
は、配列クラスを使用して呼び出される場合も失敗します。
GetClassLayout
から制御が戻ったら、rFieldOffset
バッファーのサイズが十分で、すべての使用可能な COR_FIELD_OFFSET
構造体を格納できたかどうかを確認する必要があります。 これを行うには、pcFieldOffset
が指している値と、rFieldOffset
のサイズを COR_FIELD_OFFSET
構造体のサイズで割った値を比較します。 rFieldOffset
の大きさが十分でない場合は、rFieldOffset
バッファーの割り当てを増やし、cFieldOffset
を新しい大きいサイズに更新して、GetClassLayout
を再度呼び出します。
別の方法として、最初に GetClassLayout
を長さゼロの rFieldOffset
バッファーで呼び出して、適切なバッファーのサイズを取得します。 その後、バッファーのサイズを pcFieldOffset
で返された値に設定し、GetClassLayout
を再度呼び出します。
必要条件
:「システム要件」を参照してください。
ヘッダー : CorProf.idl、CorProf.h
ライブラリ: CorGuids.lib
.NET Framework のバージョン: 2.0 以降で使用可能
関連項目
.NET