更新 : 2007 年 11 月
関数の親クラス、メタデータ トークン、および型引数が存在する場合はそれぞれの 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
[入力] 親クラスおよびその他の情報を取得する関数の ID。frameInfo
[入力] スタック フレームに関する情報を指す COR_PRF_FRAME_INFO 値。pClassId
[出力] 関数の親クラスへのポインタ。pModuleId
[出力] 関数の親クラスが定義されるモジュールへのポインタ。pToken
[出力] 関数のメタデータ トークンへのポインタ。cTypeArgs
[入力] typeArgs 配列のサイズ。pcTypeArgs
[出力] ClassID 値の総数へのポインタ。typeArgs
[出力] 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 として戻る可能性があります。 |
0 |
正確な ClassID と型引数を特定できません。つまり、ClassID は null の可能性があり、一部の型引数は Object として戻る可能性があります。 |
GetFunctionInfo2 から制御が戻ったら、typeArgs バッファのサイズが十分で、すべての ClassID 値を格納できたかどうかを確認する必要があります。これを行うには、pcTypeArgs が指している値を cTypeArgs パラメータの値と比較します。pcTypeArgs の指す値が、ClassID 値のサイズで除算された cTypeArgs の値より大きい場合は、pcTypeArgs バッファの割り当てを増やし、cTypeArgs を新しい大きいサイズに更新して、GetFunctionInfo2 を再度呼び出します。
別の方法として、最初に長さ 0 の pcTypeArgs バッファを指定して GetFunctionInfo2 を呼び出すことで、適切なバッファのサイズを取得することもできます。その後、バッファのサイズを pcTypeArgs に返された値 (ClassID 値のサイズで除算された値) に設定し、GetFunctionInfo2 を再度呼び出します。
この 2 つの方法の詳細については、「プロファイル API における呼び出し元が割り当てたバッファ」を参照してください。
必要条件
プラットフォーム : 「.NET Framework システム要件」を参照
ヘッダー : CorProf.h
ライブラリ : CorProf.idl
.NET Framework のバージョン : 3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0