OpCodes.Calli Veld

Definitie

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:

  1. Methodeargumenten arg1 worden argN naar de stapel gepusht.

  2. De methodeinvoerpointer wordt naar de stapel gepusht.

  3. Methodeargumenten arg1 via argN en 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.

  4. 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.

Van toepassing op