Udostępnij za pośrednictwem


OpCodes.Calli Pole

Definicja

Wywołuje metodę wskazaną na stosie oceny (jako wskaźnik do punktu wejścia) z argumentami opisanymi przez konwencję wywołującą.

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 

Wartość pola

Uwagi

W poniższej tabeli wymieniono format zestawu szesnastkowy i microsoft intermediate language (MSIL) instrukcji wraz z krótkim podsumowaniem referencyjnym:

Format Format zestawu Opis
29 <T> Calli callSiteDescr Wywołuje metodę wskazującą na argumenty opisane przez konwencję wywołującą.

Zachowanie przejściowe stosu w kolejności sekwencyjnej to:

  1. Argumenty arg1argN metody są wypychane do stosu.

  2. Wskaźnik wejścia metody jest wypychany do stosu.

  3. Argumenty arg1 metody za pośrednictwem argN metody i wskaźnik wejścia metody są wyskoczone ze stosu; wykonywane jest wywołanie metody. Po zakończeniu zwracana wartość jest generowana przez metodę callee i wysyłana do obiektu wywołującego.

  4. Wartość zwracana jest wypychana do stosu.

Instrukcja calli wywołuje wskaźnik wejścia metody z argumentami arg1 za pomocą metody argN. Typy tych argumentów są opisane przez konkretną konwencję wywoływania (callSiteDesc). Instrukcja calli może być natychmiast poprzedzona prefiksem tail (Tailcall), aby określić, że bieżący stan metody powinien zostać zwolniony przed przeniesieniem kontrolki. Jeśli wywołanie przeniesie kontrolę do metody wyższego zaufania niż metoda źródła, ramka stosu nie zostanie zwolniona; Zamiast tego wykonanie będzie kontynuowane w trybie dyskretnym, jakby tail nie zostało dostarczone.

Zakłada się, że wskaźnik wejścia metody jest określonym wskaźnikiem do kodu natywnego (maszyny docelowej), który może być legalnie wywoływany z argumentami opisanymi przez konwencję wywołującą (token metadanych dla sygnatury autonomicznej). Taki wskaźnik można utworzyć przy użyciu Ldftn instrukcji lub Ldvirtftn lub przekazać z kodu natywnego.

Konwencja wywoływania nie jest sprawdzana dynamicznie, więc kod używający calli instrukcji nie działa poprawnie, jeśli miejsce docelowe nie używa określonej konwencji wywoływania.

Argumenty są umieszczane na stosie w kolejności od lewej do prawej. Oznacza to, że pierwszy argument jest obliczany i umieszczany na stosie, a następnie drugi argument, a następnie trzeci, aż wszystkie niezbędne argumenty znajdują się na szczycie stosu w kolejności malejącej. Sekwencja kodu tworzenia argumentów dla wystąpienia lub metody wirtualnej musi wypchnąć odwołanie do tego wystąpienia (które nie może być odwołaniem o wartości null) przed żadnym z argumentów widocznych dla użytkownika.

SecurityException może zostać zgłoszony, jeśli zabezpieczenia systemu nie przyznają obiektowi wywołującego dostępu do wywoływanej metody. Sprawdzanie zabezpieczeń może wystąpić, gdy instrukcje języka Microsoft Intermediate Language (MSIL) są konwertowane na kod natywny, a nie w czasie wykonywania.

EmitCalli Poniższe metody mogą służyć do wykonywania calli instrukcji na stosie. Należy pamiętać, że calli należy wywołać poniższe metody, zamiast używać Emit klasy do umieszczania instrukcji bezpośrednio na stosie.

Dotyczy