OpCodes.Calli Feld

Definition

Ruft die angegebene Methode auf dem Auswertungsstapel (als Zeiger auf einen Einstiegspunkt) mit Argumenten auf, die durch eine Aufrufkonvention beschrieben sind.

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 

Feldwert

OpCode

Hinweise

Die folgende Tabelle enthält das Hexadezimal- und Microsoft Intermediate Language-Assemblyformat (MSIL) zusammen mit einer kurzen Referenzzusammenfassung:

Format Assemblyformat BESCHREIBUNG
29 < T > Calli callSiteDescr Ruft die Methode mit Argumenten auf, die durch die Aufrufkonvention beschrieben werden.

Das Übergangsverhalten des Stapels in sequenzieller Reihenfolge lautet:

  1. Methodenargumente arg1 werden argN auf den Stapel verschoben.

  2. Der Einstiegspunkt für die Methode wird auf den Stapel verschoben.

  3. Methodenargumente arg1 durch argN und der Einstiegspunkt für die Methode werden aus dem Stapel geknallt; der Aufruf der Methode wird ausgeführt. Bei Abschluss wird ein Rückgabewert durch die aufgerufene Methode generiert und an den Aufrufer gesendet.

  4. Der Rückgabewert wird auf den Stapel verschoben.

Die calli Anweisung ruft den Einstiegspunkt der Methode mit den Argumenten arg1 durch argN. Die Typen dieser Argumente werden durch die spezifische Aufrufkonvention (callSiteDesc) beschrieben. Die calli Anweisung kann unmittelbar vor einem tail Präfix (Tailcall) vorangestellt werden, um anzugeben, dass der aktuelle Methodenzustand freigegeben werden soll, bevor die Steuerung übertragen wird. Wenn der Aufruf die Steuerung an eine Methode mit höherer Vertrauenswürdigkeit übertragen würde als die Ursprungsmethode, wird der Stapelrahmen nicht freigegeben; Stattdessen wird die Ausführung automatisch fortgesetzt, als ob dies tail nicht angegeben wurde.

Der Methodeneingabezeiger wird angenommen, dass es sich um einen bestimmten Zeiger auf nativen Code (des Zielcomputers) handelt, der legitim mit den argumenten aufgerufen werden kann, die durch die aufrufende Konvention beschrieben werden (ein Metadatentoken für eine eigenständige Signatur). Ein solcher Zeiger kann mithilfe der oder Ldvirtftn der Ldftn Anweisungen erstellt oder aus systemeigenem Code übergeben werden.

Die Aufrufkonvention wird nicht dynamisch überprüft, sodass Code, der eine calli Anweisung verwendet, nicht ordnungsgemäß funktioniert, wenn das Ziel nicht die angegebene Aufrufkonvention verwendet.

Die Argumente werden auf dem Stapel in der linken nach rechts angeordneten Reihenfolge platziert. Das heißt, das erste Argument wird berechnet und auf dem Stapel platziert, dann das zweite Argument, dann der dritte, bis alle erforderlichen Argumente auf dem Stapel in absteigender Reihenfolge liegen. Die Codesequenz zum Erstellen von Argumenten für eine Instanz oder eine virtuelle Methode muss den Instanzverweis (der kein Nullverweis sein darf) vor einem der vom Benutzer sichtbaren Argumente pushen.

SecurityException kann ausgelöst werden, wenn die Systemsicherheit dem Aufrufer keinen Zugriff auf die aufgerufene Methode gewährt. Die Sicherheitsüberprüfung kann auftreten, wenn die MSIL-Anweisungen (Microsoft Intermediate Language) nicht zur Laufzeit in systemeigenen Code konvertiert werden.

Die folgenden EmitCalli Methoden können verwendet werden, um eine calli Anweisung für den Stapel auszuführen. Beachten Sie, dass calli die folgenden Methoden aufgerufen werden sollten, anstatt die Emit Klasse zu verwenden, um die Anweisung direkt auf dem Stapel zu platzieren.

Gilt für: