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