次の方法で共有


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 以降で使用可能

関連項目