OpCodes.Calli Champ
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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 :
Les arguments de méthode via
argN
sont poussésarg1
vers la pile.Le pointeur d’entrée de méthode est poussé vers la pile.
Les arguments
arg1
de méthode viaargN
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.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.
ILGenerator.EmitCalli(OpCode, CallingConventions, Type, Type[], Type[]) pour les appels utilisant une convention d’appel managé.
ILGenerator.EmitCalli(OpCode, CallingConvention, Type, Type[]) pour les appels utilisant une convention d’appel non managée.