Поделиться через


Метод 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
[входной] Идентификатор функции, для которой нужно получить родительский класс и другую информацию.

frameInfo
[входной] Значение COR_PRF_FRAME_INFO, указывающее на информацию о кадре стека.

pClassId
[выходной] Указатель на родительский класс функции.

pModuleId
[выходной] Указатель на модуль, в котором определен родительский класс функции.

pToken
[выходной] Указатель на токен метаданных функции.

cTypeArgs
[in] Размер массива typeArgs.

pcTypeArgs
[выходной] Указатель на общее количество значений ClassID.

typeArgs
[выходной] Массив значений ClassID, каждое из которых является идентификатором аргумента типа функции. При возврате из метода в параметре typeArgs содержатся все или некоторые значения ClassID.

Комментарии

Код профилировщика может вызывать ICorProfilerInfo::GetModuleMetaData для получения интерфейса метаданных для данного модуля. Токен метаданных, возвращенный в расположение, на которое ссылается pToken, можно впоследствии использовать для доступа к метаданным функции.

Идентификатор класса и аргументы типа, возвращенные с помощью параметров pClassId и typeArgs, зависят от значения, переданного в параметре frameInfo, как показано в таблице ниже.

Значение параметра frameInfo Результат
Значение COR_PRF_FRAME_INFO, полученное в результате обратного вызова FunctionEnter2 Значение ClassID, возвращенное в расположении, на которое ссылается параметр pClassId, и все аргументы типа, возвращенные в массиве typeArgs, будут точными.
Объект COR_PRF_FRAME_INFO, полученный из источника, отличного от обратного вызова FunctionEnter2 Точное значение ClassID и аргументы типа определить нельзя. То есть, ClassID может иметь значение NULL, а некоторые аргументы типа могут быть возвращены в виде объекта Object.
Ноль Точное значение ClassID и аргументы типа определить нельзя. То есть, ClassID может иметь значение NULL, а некоторые аргументы типа могут быть возвращены в виде объекта Object.

После возврата метода GetFunctionInfo2 необходимо убедиться, что буфер typeArgs был достаточно велик, чтобы вместить в себя все значения ClassID. Для этого сравните значение, на которое указывает параметр pcTypeArgs, со значением параметра cTypeArgs. Если параметр pcTypeArgs указывает на значение, превышающее значение cTypeArgs, деленное на размер значения ClassID, нужно выделить буфер pcTypeArgs большего размера, обновить параметр cTypeArgs, задав новый, больший размер и вызвать метод GetFunctionInfo2 снова.

Кроме того, сначала можно вызвать метод GetFunctionInfo2 с буфером pcTypeArgs нулевой длины для получения правильного размера буфера. Затем можно задать размер буфера равным значению, возвращенному в параметре pcTypeArgs, деленному на размер значения ClassID, и вызвать метод GetFunctionInfo2 снова.

Требования

Платформы: см. раздел Требования к системе.

Заголовок: CorProf.idl, CorProf.h

Библиотека: CorGuids.lib

версии платформа .NET Framework: доступно с версии 2.0.

См. также раздел