OpCodes.Calli Campo

Definição

Chama o método indicado na pilha de avaliação (como um ponteiro para um ponto de entrada) com argumentos descritos por uma convenção de chamada.

public: static initonly System::Reflection::Emit::OpCode Calli;
public static readonly System.Reflection.Emit.OpCode Calli;
 staticval mutable Calli : System.Reflection.Emit.OpCode
Public Shared ReadOnly Calli As OpCode 

Valor do campo

Comentários

A tabela a seguir lista o formato de assembly hexadecimal e Microsoft linguagem intermediária (MSIL) da instrução, juntamente com um breve resumo de referência:

Formato Formato de assembly Description
29 <T> Calli callSiteDescr Chama o método apontado com argumentos descritos pela convenção de chamada.

O comportamento de transição da pilha, em ordem sequencial, é:

  1. Os argumentos de método são enviados arg1argN por push para a pilha.

  2. O ponteiro de entrada do método é enviado por push para a pilha.

  3. arg1 Argumentos de método e argN o ponteiro de entrada do método são exibidos da pilha; a chamada para o método é executada. Quando concluído, um valor retornado é gerado pelo método de destinatário do chamador e enviado ao chamador.

  4. O valor retornado é enviado por push para a pilha.

A calli instrução chama o ponteiro de entrada do método com os argumentosarg1.argN Os tipos desses argumentos são descritos pela convenção de chamada específica (callSiteDesc). A calli instrução pode ser imediatamente precedida por um tail prefixo (Tailcall) para especificar que o estado do método atual deve ser liberado antes de transferir o controle. Se a chamada transferir o controle para um método de maior confiança do que o método de origem, o quadro de pilha não será liberado; em vez disso, a execução continuará silenciosamente como se tail não tivesse sido fornecida.

O ponteiro de entrada do método é considerado um ponteiro específico para o código nativo (do computador de destino) que pode ser legitimamente chamado com os argumentos descritos pela convenção de chamada (um token de metadados para uma assinatura autônoma). Esse ponteiro pode ser criado usando as Ldftn instruções ou Ldvirtftn passado do código nativo.

A convenção de chamada não é verificada dinamicamente, portanto, o código que usa uma calli instrução não funciona corretamente se o destino realmente não usa a convenção de chamada especificada.

Os argumentos são colocados na pilha na ordem da esquerda para a direita. Ou seja, o primeiro argumento é computado e colocado na pilha, depois no segundo argumento, depois no terceiro, até que todos os argumentos necessários estejam em cima da pilha em ordem decrescente. A sequência de código de criação de argumento para uma instância ou método virtual deve enviar por push essa referência de instância (que não deve ser uma referência nula) antes de qualquer um dos argumentos visíveis pelo usuário.

SecurityException poderá ser gerada se a segurança do sistema não conceder ao chamador acesso ao método chamado. A verificação de segurança pode ocorrer quando as instruções de Microsoft Linguagem Intermediária (MSIL) são convertidas em código nativo em vez de em runtime.

Os métodos a seguir EmitCalli podem ser usados para executar uma calli instrução na pilha. Observe que calli deve ser chamado pelos métodos abaixo em vez de usar a Emit classe para colocar a instrução diretamente na pilha.

Aplica-se a