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 aufrufenden Konvention beschrieben werden.

Das Stapelübergangsverhalten 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 durch argN und der Methodeneinstiegszeiger werden aus dem Stapel geknallt. Der Aufruf der -Methode wird ausgeführt. Nach Abschluss wird ein Rückgabewert von der aufgerufenen Methode 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 argNauf. 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 im Hintergrund fortgesetzt, als wäre die tail nicht angegeben worden.

Es wird angenommen, dass der Methodeneinstiegszeiger ein bestimmter Zeiger auf nativen Code (des Zielcomputers) ist, der mit den Argumenten aufgerufen werden kann, die von der aufrufenden Konvention beschrieben werden (ein Metadatentoken für eine eigenständige Signatur). Ein solcher Zeiger kann mithilfe der Ldftn Anweisungen oder Ldvirtftn erstellt oder aus nativem Code übergeben werden.

Die Aufrufende Konvention 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 auf dem Stapel platziert. Das heißt, das erste Argument wird berechnet und auf dem Stapel platziert, dann das zweite Argument, dann das dritte, bis sich alle erforderlichen Argumente in absteigender Reihenfolge auf dem Stapel befinden. Die Codesequenz zum Erstellen von Argumenten für eine instance oder virtuelle Methode muss 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 sie über die folgenden Methoden aufgerufen werden sollten, anstatt die Emit -Klasse zu verwenden, um die Anweisung direkt im Stapel zu platzieren.

Gilt für: