OpCodes.Calli Feld
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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:
Methodenargumente
arg1
durchargN
werden auf den Stapel gepusht.Der Methodeneinstiegszeiger wird auf den Stapel gepusht.
Methodenargumente
arg1
bisargN
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.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.
ILGenerator.EmitCalli(OpCode, CallingConventions, Type, Type[], Type[]) für Aufrufe mit einer Konvention für verwaltete Aufrufe.
ILGenerator.EmitCalli(OpCode, CallingConvention, Type, Type[]) für Aufrufe, die eine nicht verwaltete Aufrufkonvention verwenden.
Gilt für:
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für