Partager via


OpCodes.Calli Champ

Définition

Appelle la méthode indiquée dans la pile d'évaluation (sous la forme d'un pointeur vers un point d'entrée) avec les arguments décrits par une convention d'appel.

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 

Valeur de champ

Remarques

Le tableau suivant répertorie le format d’assembly MSIL et hexadécimal de l’instruction, ainsi qu’un bref résumé des références :

Format Format d’assembly Description
29 <T> Calli callSiteDescr Appelle la méthode pointée avec les arguments décrits par la convention d’appel.

Le comportement transitionnel de la pile, dans l’ordre séquentiel, est le suivant :

  1. Les arguments de méthode via argN sont poussés arg1 vers la pile.

  2. Le pointeur d’entrée de méthode est poussé vers la pile.

  3. Les arguments arg1 de méthode via argN et le pointeur d’entrée de méthode sont extraits de la pile ; l’appel à la méthode est effectué. Lorsque vous avez terminé, une valeur de retour est générée par la méthode appelée et envoyée à l’appelant.

  4. La valeur de retour est envoyée dans la pile.

L’instruction calli appelle le pointeur d’entrée de méthode avec les arguments arg1 via argN. Les types de ces arguments sont décrits par la convention d’appel spécifique (callSiteDesc). L’instruction calli peut être immédiatement précédée d’un tail préfixe (Tailcall) pour spécifier que l’état actuel de la méthode doit être libéré avant le transfert du contrôle. Si l’appel transfère le contrôle vers une méthode de confiance supérieure à la méthode d’origine, la trame de pile ne sera pas libérée ; au lieu de cela, l’exécution se poursuit silencieusement comme si le n’avait tail pas été fourni.

Le pointeur d’entrée de méthode est supposé être un pointeur spécifique vers le code natif (de l’ordinateur cible) qui peut être appelé légitimement avec les arguments décrits par la convention d’appel (jeton de métadonnées pour une signature autonome). Un tel pointeur peut être créé à l’aide des Ldftn instructions ou Ldvirtftn , ou transmis à partir du code natif.

La convention d’appel n’est pas vérifiée dynamiquement, de sorte que le code qui utilise une calli instruction ne fonctionne pas correctement si la destination n’utilise pas réellement la convention d’appel spécifiée.

Les arguments sont placés sur la pile dans l’ordre de gauche à droite. Autrement dit, le premier argument est calculé et placé sur la pile, puis le deuxième argument, puis le troisième, jusqu’à ce que tous les arguments nécessaires soient au-dessus de la pile dans l’ordre décroissant. La séquence de code de génération d’arguments pour un instance ou une méthode virtuelle doit envoyer (push) cette référence instance (qui ne doit pas être une référence null) avant l’un des arguments visibles par l’utilisateur.

SecurityException peut être levée si la sécurité système n’accorde pas à l’appelant l’accès à la méthode appelée. La case activée de sécurité peut se produire lorsque les instructions MSIL (Microsoft Intermediate Language) sont converties en code natif plutôt qu’au moment de l’exécution.

Les méthodes suivantes EmitCalli peuvent être utilisées pour effectuer une calli instruction sur la pile. Notez que calli doit être appelé par le biais des méthodes ci-dessous plutôt que d’utiliser la Emit classe pour placer l’instruction directement sur la pile.

S’applique à