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

Hinweise

In der folgenden Tabelle sind das Hexadezimal- und MSIL-Assemblyformat (Microsoft Intermediate Language) der Anweisung sowie eine kurze Referenzzusammenfassung aufgeführt:

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

Das Übergangsverhalten des Stapels in sequenzieller Reihenfolge lautet:

  1. Methodenargumente arg1 durch argN werden auf den Stapel gepusht.

  2. Der Methodeneinstiegszeiger wird auf den Stapel gepusht.

  3. Methodenargumente arg1 bis argN und der Methodeneinstiegszeiger werden aus dem Stapel geknallt. Der Aufruf der -Methode wird ausgeführt. Nach Abschluss des Vorgangs wird von der aufgerufenen Methode ein Rückgabewert generiert und an den Aufrufer gesendet.

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

Die calli -Anweisung ruft den Methodeneinstiegszeiger mit den Argumenten arg1 über auf argN. Die Typen dieser Argumente werden durch die spezifische Aufrufkonvention (callSiteDesc) beschrieben. Der calli Anweisung kann unmittelbar ein tail Präfix (Tailcall) vorangestellt werden, um anzugeben, dass der aktuelle Methodenzustand vor der Übertragung der Steuerung freigegeben werden soll. Wenn der Aufruf die Steuerung an eine Methode mit höherer Vertrauenswürdigkeit als die Ursprungsmethode übertragen würde, wird der Stapelrahmen nicht freigegeben. stattdessen wird die Ausführung so fortgesetzt, als ob nicht tail angegeben worden wäre.

Es wird davon ausgegangen, dass der Methodeneinstiegszeiger ein bestimmter Zeiger auf systemeigenen Code (des Zielcomputers) ist, der mit den von der Aufrufenden Konvention beschriebenen Argumenten (ein Metadatentoken für eine eigenständige Signatur) legitim aufgerufen werden kann. Ein solcher Zeiger kann mithilfe der Ldftn Anweisungen oder Ldvirtftn erstellt oder aus nativem 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 in der Reihenfolge von links nach rechts im Stapel platziert. Das heißt, das erste Argument wird berechnet und im Stapel platziert, dann das zweite Argument, dann das dritte, bis alle erforderlichen Argumente in absteigender Reihenfolge auf dem Stapel stehen. Die Argumenterstellungscodesequenz für eine instance oder virtuelle Methode muss diese instance Verweis (der kein NULL-Verweis 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 erfolgen, wenn die MSIL-Anweisungen (Microsoft Intermediate Language) nicht zur Laufzeit, sondern in nativen 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 über die folgenden Methoden aufgerufen werden sollte, anstatt die Emit -Klasse zu verwenden, um die Anweisung direkt im Stapel zu platzieren.

Gilt für: