Compartir a través de


OpCodes.Calli Campo

Definición

Llama al método indicado en la pila de evaluación (como puntero a un punto de entrada) con los argumentos descritos mediante una convención de llamada.

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 de campo

Comentarios

En la tabla siguiente se muestra el formato de ensamblado hexadecimal y lenguaje intermedio de Microsoft (MSIL), junto con un breve resumen de referencia:

Formato Formato de ensamblado Descripción
29 <T> Calli callSiteDescr Llama al método al que apunta con los argumentos descritos por la convención de llamada.

El comportamiento de transición de pila, en orden secuencial, es:

  1. Los argumentos arg1 del método a través argN se insertan en la pila.

  2. El puntero de entrada del método se inserta en la pila.

  3. Los argumentos arg1 del método a través argN de y el puntero de entrada del método se extraen de la pila; se realiza la llamada al método . Cuando se completa, el método de llamada genera un valor devuelto y se envía al autor de la llamada.

  4. El valor devuelto se inserta en la pila.

La calli instrucción llama al puntero de entrada del método con los argumentos arg1 a través argNde . Los tipos de estos argumentos se describen mediante la convención de llamada específica (callSiteDesc). La calli instrucción puede ir precedida inmediatamente por un tail prefijo (Tailcall) para especificar que el estado del método actual debe liberarse antes de transferir el control. Si la llamada transferiría el control a un método de mayor confianza que el método de origen, no se liberará el marco de pila; en su lugar, la ejecución continuará silenciosamente como si tail no se hubiera proporcionado.

Se supone que el puntero de entrada del método es un puntero específico al código nativo (de la máquina de destino) que se puede llamar legítimamente con los argumentos descritos por la convención de llamada (un token de metadatos para una firma independiente). Este puntero se puede crear mediante las Ldftn instrucciones o Ldvirtftn , o pasar desde código nativo.

La convención de llamada no se comprueba dinámicamente, por lo que el código que usa una calli instrucción no funciona correctamente si el destino no usa realmente la convención de llamada especificada.

Los argumentos se colocan en la pila en orden de izquierda a derecha. Es decir, el primer argumento se calcula y coloca en la pila, después el segundo argumento y, a continuación, el tercero, hasta que todos los argumentos necesarios están encima de la pila en orden descendente. La secuencia de código de creación de argumentos para una instancia o un método virtual debe insertar esa referencia de instancia (que no debe ser una referencia nula) antes de ninguno de los argumentos visibles para el usuario.

SecurityException se puede producir si la seguridad del sistema no concede al autor de la llamada acceso al método llamado. La comprobación de seguridad puede producirse cuando las instrucciones del lenguaje intermedio de Microsoft (MSIL) se convierten en código nativo en lugar de en tiempo de ejecución.

Los métodos siguientes EmitCalli se pueden usar para realizar una calli instrucción en la pila. Tenga en cuenta que calli se debe llamar a través de los métodos siguientes en lugar de usar la Emit clase para colocar la instrucción directamente en la pila.

Se aplica a