Cette page vous a-t-elle été utile ?
Votre avis sur ce contenu est important. N'hésitez pas à nous faire part de vos commentaires.
Vous avez d'autres commentaires ?
1500 caractères restants
Exporter (0) Imprimer
Développer tout
Développer Réduire

OpCodes.Calli, champ

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.

Espace de noms : System.Reflection.Emit
Assembly : mscorlib (dans mscorlib.dll)

public static readonly OpCode Calli
public static final OpCode Calli
public static final var Calli : OpCode

Le tableau suivant répertorie le format d'assembly hexadécimal et MSIL (Microsoft Intermediate Language) de l'instruction et donne un bref résumé de référence :

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 de transition de la pile, dans un ordre séquentiel, est le suivant :

  1. Les arguments de méthode arg1 jusqu'à argN font l'objet d'un push dans la pile.

  2. Le pointeur d'entrée de la méthode fait l'objet d'un push dans la pile.

  3. Les arguments de méthode arg1 jusqu'à argN et le pointeur d'entrée de la méthode sont extraits (pop) de la pile ; l'appel à la méthode est effectué. Une fois terminé, une valeur de retour est générée par la méthode de l'appelé et envoyée à l'appelant.

  4. La valeur de retour fait l'objet d'un push dans la pile.

L'instruction calli appelle le pointeur d'entrée de la méthode avec les arguments arg1 jusqu'à 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 préfixe tail (champ Tailcall) pour spécifier que l'état de la méthode actuelle doit être libéré avant le transfert du contrôle. Si l'appel transfère le contrôle à une méthode dont le niveau de confiance est supérieur à celui de la méthode d'origine, le frame de pile n'est pas libéré ; l'exécution se poursuit en mode silencieux comme si tail n'avait pas été fourni.

Le pointeur d'entrée de la méthode est considéré comme étant un pointeur spécifique vers le code natif (de l'ordinateur cible) pouvant être appelé de manière légitime avec les arguments décrits par la convention d'appel (un jeton de métadonnées pour une signature autonome). Vous pouvez créer un pointeur de ce type avec les instructions Ldftn ou Ldvirtftn ou passé à partir de code natif.

La convention d'appel n'est pas contrôlée de manière dynamique ; le code utilisant une instruction calli ne fonctionne donc pas correctement si la destination n'utilise pas la convention d'appel spécifiée.

Les arguments sont placés dans la pile de gauche à droite. En d'autres termes, le premier argument est calculé et placé dans la pile, puis viennent le deuxième et le troisième arguments et ainsi de suite jusqu'à ce que tous les arguments nécessaires soient situés en haut de la pile dans l'ordre décroissant. La séquence de code de génération d'arguments pour une méthode virtuelle ou d'instance doit exécuter un push de cette référence d'instance (qui ne doit pas être une référence null) avant tout argument visible par l'utilisateur.

SecurityException peut être levé si le système de sécurité n'accorde pas à l'appelant l'accès à la méthode appelée. La vérification de la sécurité peut se produire lors de la conversion des instructions MSIL (Microsoft Intermediate Language) en code natif et non pas au moment de l'exécution.

Les méthodes EmitCalli suivantes peuvent être utilisées pour exécuter une instruction calli dans la pile. Notez que calli doit être appelé via les méthodes ci-dessous au lieu d'utiliser la classe Emit pour placer l'instruction directement dans la pile.

  • ILGenerator.EmitCalli(Opcode, CallingConventions, Type, Type[], Type[]) pour les appels utilisant une convention d'appel managée.

  • ILGenerator.EmitCalli(Opcode, CallingConvention, Type, Type[]) pour les appels utilisant une convention d'appel non managée.

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0, 1.1, 1.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft