次の方法で共有


ICorProfilerInfo2::GetFunctionInfo2 メソッド

関数の親クラス、メタデータ トークン、および型引数が存在する場合はそれぞれの ClassID を取得します。

構文

HRESULT GetFunctionInfo2(  
    [in]  FunctionID funcId,  
    [in]  COR_PRF_FRAME_INFO frameInfo,  
    [out] ClassID *pClassId,  
    [out] ModuleID *pModuleId,  
    [out] mdToken *pToken,  
    [in]  ULONG32 cTypeArgs,  
    [out] ULONG32 *pcTypeArgs,  
    [out] ClassID typeArgs[]);  

パラメーター

funcId
[in] 親クラスおよびその他の情報を取得する関数の ID。

frameInfo
[in] スタック フレームに関する情報を指す COR_PRF_FRAME_INFO 値。

pClassId
[out] 関数の親クラスへのポインター。

pModuleId
[out] 関数の親クラスが定義されているモジュールへのポインター。

pToken
[out] 関数のメタデータ トークンへのポインター。

cTypeArgs
[in] typeArgs 配列のサイズ。

pcTypeArgs
[out] ClassID 値の総数へのポインター。

typeArgs
[out] ClassID 値の配列。各値は、関数の型引数の ID です。 このメソッドが戻るとき、使用できる ClassID 値の一部または全部が typeArgs に格納されます。

解説

プロファイラー コードで ICorProfilerInfo::GetModuleMetaData を呼び出して、指定したモジュールの metadata インターフェイスを取得できます。 pToken が参照している場所に返されるメタデータ トークンを使用すると、関数のメタデータにアクセスできます。

次の表に示すように、pClassId パラメーターで返されるクラス ID、および typeArgs パラメーターで返される型引数は、frameInfo パラメーターで渡される値によって異なります。

パラメーター frameInfo の値。 結果
FunctionEnter2 コールバックから取得された COR_PRF_FRAME_INFO pClassId によって参照される場所に返される ClassID と、typeArgs 配列で返されるすべての型引数は正確です。
FunctionEnter2 コールバック以外のソースから取得された COR_PRF_FRAME_INFO 正確な ClassID と型引数を特定できません。 つまり、ClassID は null の可能性があり、一部の型引数は Object として戻る可能性があります。
ゼロ 正確な ClassID と型引数を特定できません。 つまり、ClassID は null の可能性があり、一部の型引数は Object として戻る可能性があります。

GetFunctionInfo2 から制御が戻ったら、typeArgs バッファーのサイズが十分で、すべての ClassID 値を格納できたかどうかを確認する必要があります。 これを行うには、pcTypeArgs が指している値を cTypeArgs パラメーターの値と比較します。 pcTypeArgs の指す値が、ClassID 値のサイズで除算された cTypeArgs の値より大きい場合は、pcTypeArgs バッファーの割り当てを増やし、cTypeArgs を新しい大きいサイズに更新して、GetFunctionInfo2 を再度呼び出します。

別の方法として、最初に GetFunctionInfo2 を長さゼロの pcTypeArgs バッファーで呼び出して、適切なバッファーのサイズを取得します。 その後、バッファーのサイズを pcTypeArgs に返された値 (ClassID 値のサイズで除算された値) に設定し、GetFunctionInfo2 を再度呼び出します。

必要条件

:システム要件」を参照してください。

ヘッダー : CorProf.idl、CorProf.h

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 2.0 以降で使用可能

関連項目