OpCodes.Calli Veld
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Roept de methode aan die is aangegeven op de evaluatiestack (als een aanwijzer naar een toegangspunt) met argumenten die worden beschreven door een aanroepende conventie.
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
Waarde van veld
Opmerkingen
De volgende tabel bevat de hexadecimale en Microsoft MSIL-assembly-indeling (Tussenliggende taal), samen met een beknopt overzicht:
| Format | Assembly-indeling | Beschrijving |
|---|---|---|
29 <T> |
calli callSiteDescr |
Roept de methode aan die aangegeven is met argumenten die worden beschreven door de aanroepende conventie. |
Het overgangsgedrag van de stack, in opeenvolgende volgorde, is:
Methodeargumenten
arg1wordenargNnaar de stapel gepusht.De methodeinvoerpointer wordt naar de stapel gepusht.
Methodeargumenten
arg1viaargNen de methodeinvoerpointer worden uit de stack gepopt. De aanroep naar de methode wordt uitgevoerd. Wanneer u klaar bent, wordt er een retourwaarde gegenereerd door de aanroepmethode en verzonden naar de aanroeper.De retourwaarde wordt naar de stack gepusht.
De calli instructie roept de methodeinvoerpointer aan met de argumenten arg1 via argN. De typen van deze argumenten worden beschreven door de specifieke aanroepconventie (callSiteDesc). De calli instructie kan onmiddellijk worden voorafgegaan door een tail voorvoegsel (Tailcall) om op te geven dat de huidige methodestatus moet worden vrijgegeven voordat het besturingselement wordt overgedragen. Als de aanroep controle overzet naar een methode met een hogere vertrouwensrelatie dan de oorsprongsmethode, wordt het stackframe niet vrijgegeven; In plaats daarvan blijft de uitvoering op de achtergrond alsof de tail uitvoering niet is opgegeven.
De methodeinvoerpointer wordt verondersteld een specifieke aanwijzer te zijn voor systeemeigen code (van de doelcomputer) die legitiem kan worden aangeroepen met de argumenten die worden beschreven door de aanroepende conventie (een metagegevenstoken voor een zelfstandige handtekening). Een dergelijke aanwijzer kan worden gemaakt met behulp van de Ldftn instructies Ldvirtftn of doorgegeven vanuit systeemeigen code.
De aanroepconventie wordt niet dynamisch gecontroleerd, dus code die gebruikmaakt van een calli instructie werkt niet correct als de bestemming niet daadwerkelijk gebruikmaakt van de opgegeven oproepconventie.
De argumenten worden op de stapel geplaatst in volgorde van links naar rechts. Dat wil gezegd, het eerste argument wordt berekend en op de stapel geplaatst, vervolgens het tweede argument, vervolgens het derde, totdat alle benodigde argumenten boven de stapel in aflopende volgorde staan. De codereeks voor het samenstellen van argumenten voor een exemplaar of virtuele methode moet die instantieverwijzing (die geen null-verwijzing mag zijn) pushen vóór een van de door de gebruiker zichtbare argumenten.
SecurityException kan worden gegenereerd als de systeembeveiliging de aanroeper geen toegang verleent tot de aangeroepen methode. De beveiligingscontrole kan optreden wanneer de Microsoft MSIL-instructies (Intermediate Language) worden geconverteerd naar systeemeigen code in plaats van tijdens runtime.
De volgende EmitCalli methoden kunnen worden gebruikt om een calli instructie uit te voeren op de stack. Houd er rekening mee dat calli moet worden aangeroepen via de onderstaande methoden in plaats van de Emit klasse te gebruiken om de instructie rechtstreeks op de stapel te plaatsen.
ILGenerator.EmitCalli(OpCode, CallingConventions, Type, Type[], Type[]) voor gesprekken met behulp van een beheerde oproepconventie.
ILGenerator.EmitCalli(OpCode, CallingConvention, Type, Type[]) voor oproepen die een niet-beheerde oproepconventie gebruiken.