次の方法で共有


ICorProfilerInfo2::GetClassLayout メソッド

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

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 を文字列クラスと一緒に使用する場合、このメソッドは E_INVALIDARG というエラー コードで失敗します。 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、CorProf.h

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

参照

参照

ICorProfilerInfo インターフェイス

ICorProfilerInfo2 インターフェイス

その他の技術情報

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

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