ICorProfilerInfo2::GetFunctionInfo2 方法
更新: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
[in] 要取得父類別和其他資訊之函式的 ID。frameInfo
[in] 指向堆疊框架相關資訊的 COR_PRF_FRAME_INFO 值。pClassId
[out] 此函式之父類別的指標。pModuleId
[out] 此函式之父類別定義所在模組的指標。pToken
[out] 此函式之中繼資料語彙基元的指標。cTypeArgs
[in] typeArgs 陣列的大小。pcTypeArgs
[out] ClassID 值總數的指標。typeArgs
[out] ClassID 值的陣列,其中每個值分別是此函式之型別引數的 ID。傳回方法時,typeArgs 將會包含部分或所有 ClassID 值。
備註
程式碼分析工具會呼叫 ICorProfilerInfo::GetModuleMetaData,以取得給定模組的 metadata 介面。傳回至 pToken 所參考之位置的中繼資料語彙基元就可以用來存取此函式的中繼資料。
透過 pClassId 和 typeArgs 參數傳回的類別 ID 和型別引數,取決於傳入 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 指向大於 cTypeArgs 的值 (除以 ClassID 值的大小),請配置較大的 pcTypeArgs 緩衝區,以較新較大的大小來更新 cTypeArgs,然後重新呼叫 GetFunctionInfo2。
另外,您也可以先使用長度為零的 pcTypeArgs 緩衝區來呼叫 GetFunctionInfo2,以取得正確的緩衝區大小。接著您就可以將緩衝區大小設定為 pcTypeArgs 中傳回的值 (除以 ClassID 值的大小),並再次呼叫 GetFunctionInfo2。
如需這兩種方法的詳細資訊,請參閱分析 API 中由呼叫端配置的緩衝區。
需求
**平台:**請參閱 .NET Framework 系統需求。
**標頭:**CorProf.h
**程式庫:**CorProf.idl
**.NET Framework 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0