OpCodes.Calli Fält

Definition

Anropar den metod som anges i utvärderingsstacken (som en pekare till en startpunkt) med argument som beskrivs av en anropskonvention.

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 

Fältvärde

Kommentarer

I följande tabell visas instruktionens sammansättningsformat för hexadecimalt och Microsoft mellanliggande språk (MSIL), tillsammans med en kort referenssammanfattning:

Format Sammansättningsformat Description
29 <T> Calli callSiteDescr Anropar metoden som pekas på med argument som beskrivs av anropskonventionen.

Stackens övergångsbeteende i sekventiell ordning är:

  1. Metodargumenten arg1 skickas till argN stacken.

  2. Metodinmatningspekaren skickas till stacken.

  3. Metodargument arg1 genom argN och metodinmatningspekaren poppas från stacken. Anropet till metoden utförs. När det är klart genereras ett returvärde av anroparmetoden och skickas till anroparen.

  4. Returvärdet skickas till stacken.

Instruktionen calli anropar metodinmatningspekaren med argumenten arg1 via argN. Typerna av dessa argument beskrivs av den specifika anropskonventionen (callSiteDesc). Instruktionen calli kan omedelbart föregås av ett tail prefix (Tailcall) för att ange att det aktuella metodtillståndet ska frisläppas innan kontrollen överförs. Om anropet skulle överföra kontrollen till en metod med högre förtroende än ursprungsmetoden frigörs inte stackramen. i stället fortsätter körningen tyst som om den tail inte hade angetts.

Metodinmatningspekaren antas vara en specifik pekare för intern kod (för måldatorn) som kan anropas legitimt med argumenten som beskrivs av anropskonventionen (en metadatatoken för en fristående signatur). En sådan pekare kan skapas med hjälp av Ldftn instruktionerna eller Ldvirtftn skickas från den interna koden.

Anropskonventionen kontrolleras inte dynamiskt, så kod som använder en calli instruktion fungerar inte korrekt om målet faktiskt inte använder den angivna anropskonventionen.

Argumenten placeras på stacken i vänster-till-höger-ordning. Det första argumentet beräknas och placeras på stacken, sedan det andra argumentet, sedan det tredje, tills alla nödvändiga argument ligger ovanpå stacken i fallande ordning. Den argumentskapande kodsekvensen för en instans eller virtuell metod måste push-överföra instansreferensen (som inte får vara en null-referens) före något av de användar synliga argumenten.

SecurityException kan utlöses om systemsäkerheten inte ger anroparen åtkomst till den anropade metoden. Säkerhetskontrollen kan inträffa när instruktionerna för Microsoft mellanliggande språk (MSIL) konverteras till intern kod i stället för vid körning.

Följande EmitCalli metoder kan användas för att utföra en calli instruktion på stacken. Observera att calli bör anropas via metoderna nedan i stället för att använda Emit klassen för att placera instruktionen direkt på stacken.

Gäller för