Compartilhar via


Método ICorProfilerInfo2::GetFunctionInfo2

Obtém a classe pai, o token de metadados e o ClassID de cada argumento de tipo, se presente, de uma função.

Sintaxe

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[]);  

Parâmetros

funcId
[in] A ID da função para a qual obter a classe pai e outras informações.

frameInfo
[in] Um valor COR_PRF_FRAME_INFO que aponta para informações sobre um registro de ativação.

pClassId
[out] Um ponteiro para a classe pai da função.

pModuleId
[out] Um ponteiro para o módulo no qual a classe pai da função é definida.

pToken
[out] Um ponteiro para o token de metadados da função.

cTypeArgs
[in] O tamanho da matriz typeArgs.

pcTypeArgs
[out] Um ponteiro para o número total de ClassID valores.

typeArgs
[out] Uma matriz de valores ClassID, cada um deles é a ID de um argumento de tipo da função. Quando o método retornar, typeArgs conterá alguns dos ou todos os valores ClassID.

Comentários

O código do criador de perfil pode chamar ICorProfilerInfo::GetModuleMetaData para obter uma interface de metadados para um determinado módulo. O token de metadados retornado ao local referenciado por pToken pode ser usado para acessar os metadados da função.

A ID da classe e os argumentos de tipo que são retornados por meio dos parâmetros pClassId e typeArgs dependem do valor passado no parâmetro frameInfo, conforme mostrado na tabela a seguir.

Valor do parâmetro frameInfo Result
Um valor COR_PRF_FRAME_INFO que foi obtido de um retorno de chamada FunctionEnter2 O ClassID, retornado no local referenciado por pClassId, e todos os argumentos de tipo, retornados na matriz typeArgs, serão exatos.
Um COR_PRF_FRAME_INFO que foi obtido de uma origem diferente de um retorno de chamada FunctionEnter2 Os argumentos de tipo e ClassID exatos não podem ser determinados. Ou seja, o valor ClassID pode ser nulo, e alguns argumentos de tipo podem voltar como Object.
Zero Os argumentos de tipo e ClassID exatos não podem ser determinados. Ou seja, o valor ClassID pode ser nulo, e alguns argumentos de tipo podem voltar como Object.

Após o retorno de GetFunctionInfo2, você deve verificar se o buffer typeArgs era grande o suficiente para conter todos os valores ClassID. Para fazer isso, compare o valor para o qual pcTypeArgs aponta com o valor do parâmetro cTypeArgs. Se pcTypeArgs apontar para um valor maior do que cTypeArgs dividido pelo tamanho de um valor ClassID, aloque um buffer pcTypeArgs maior, atualize cTypeArgs com o novo tamanho maior e chame GetFunctionInfo2 novamente.

Como alternativa, primeiro você pode chamar GetFunctionInfo2 com um buffer pcTypeArgs de comprimento zero para obter o tamanho correto do buffer. Em seguida, você pode definir o tamanho do buffer para o valor retornado em pcTypeArgs dividido pelo tamanho de um valor ClassID e chamar GetFunctionInfo2 novamente.

Requisitos

Plataformas: confira Requisitos do sistema.

Cabeçalho: CorProf.idl, CorProf.h

Biblioteca: CorGuids.lib

Versões do .NET Framework: disponíveis desde 2.0

Confira também