OpCodes.Calli Fält
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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:
Metodargumenten
arg1skickas tillargNstacken.Metodinmatningspekaren skickas till stacken.
Metodargument
arg1genomargNoch 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.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.
ILGenerator.EmitCalli(OpCode, CallingConventions, Type, Type[], Type[]) för samtal med hjälp av en hanterad samtalskonvention.
ILGenerator.EmitCalli(OpCode, CallingConvention, Type, Type[]) för samtal med en ohanterad samtalskonvention.