OpCodes.Calli Pole

Definice

Volá metodu uvedenou ve zkušebním zásobníku (jako ukazatel na vstupní bod) s argumenty popsanými konvencí volání.

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 

Hodnota pole

Poznámky

Následující tabulka uvádí šestnáctkový formát sestavení jazyka MSIL (Intermediate Language) a Microsoft s stručným přehledem referenčních informací:

Formát Formát sestavení Description
29 <T> Calli callSiteDescr Volá metodu, na kterou odkazuje argumenty popsané konvencí volání.

Přechodné chování zásobníku v sekvenčním pořadí je:

  1. Argumenty arg1 metody jsou argN vloženy do zásobníku.

  2. Vstupní ukazatel metody je vložen do zásobníku.

  3. Argumenty arg1 metody procházející argN metodou a vstupní ukazatel metody se přepnou ze zásobníku; volání metody se provede. Po dokončení je vrácená hodnota vygenerována volanou metodou a odeslána volajícímu.

  4. Vrácená hodnota se nasdílí do zásobníku.

Instrukce calli volá ukazatel zadávání metody s argumenty arg1 prostřednictvím argN. Typy těchto argumentů jsou popsány konkrétní konvencí volání (callSiteDesc). Instrukce calli může bezprostředně předcházet předponou tail (Tailcall), aby bylo možné určit, že aktuální stav metody by měl být vydán před přenosem řízení. Pokud by volání přeneslo řízení na metodu vyšší důvěryhodnosti, než je metoda původu, rámec zásobníku nebude uvolněn; místo toho bude provádění pokračovat bezobslužně, jako by tail nebyla zadána.

Vstupní ukazatel metody se předpokládá, že je konkrétním ukazatelem nativního kódu (cílového počítače), který lze legitimním voláním volat s argumenty popsanými konvencí volání (token metadat pro samostatný podpis). Takový ukazatel lze vytvořit pomocí Ldftn pokynů nebo Ldvirtftn předání z nativního kódu.

Konvence volání se nekontroluje dynamicky, takže kód, který používá calli instrukce, nefunguje správně, pokud cíl ve skutečnosti nepoužívá zadanou konvenci volání.

Argumenty se umístí do zásobníku v pořadí zleva doprava. To znamená, že první argument se vypočítá a umístí do zásobníku, pak druhý argument, potom třetí, dokud všechny nezbytné argumenty nejsou na vrcholu zásobníku v sestupném pořadí. Sekvence kódu sestavení argumentu pro instanci nebo virtuální metodu musí odeslat odkaz na instanci (který nesmí být odkaz null) před libovolným argumentem viditelným uživatelem.

SecurityException může být vyvolána, pokud zabezpečení systému neuděluje volajícímu přístup k volané metodě. Ke kontrole zabezpečení může dojít v případě, že se instrukce jazyka MSIL (Microsoft Intermediate Language) převedou na nativní kód místo za běhu.

EmitCalli Následující metody lze použít k provedení calli instrukce v zásobníku. Mějte na paměti, že calli by se měly volat pomocí následujících metod místo použití Emit třídy k umístění instrukce přímo do zásobníku.

Platí pro