次の方法で共有


ICorProfilerInfo2::GetClassLayout メソッド

更新 : 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

参照

参照

ICorProfilerInfo

ICorProfilerInfo2

その他の技術情報

プロファイリングのインターフェイス

プロファイル (アンマネージ API リファレンス)