OpCodes.Calli 欄位

定義

以呼叫慣例所描述的引數,呼叫在評估堆疊上指示的方法 (做為進入點的指標)。

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 

欄位值

備註

下表列出指令的十六進位和 Microsoft 中繼語言 (MSIL) 元件格式,以及簡短的參考摘要:

格式 元件格式 Description
29 <T> 愈傷 組織 callSiteDescr 使用呼叫慣例所描述的自變數呼叫指向 的方法。

堆疊轉換行為依循序順序為:

  1. 方法argN自變數arg1會推送至堆疊。

  2. 方法項目指標會推送至堆疊。

  3. 透過 argN 的方法自變數arg1和方法項目指標會從堆疊中彈出;會執行對 方法的呼叫。 完成時,呼叫端方法會產生傳回值,並傳送給呼叫端。

  4. 傳回值會推送至堆疊。

指令calli會透過 argN以自變數arg1呼叫方法項目指標。 這些自變數的類型是由特定呼叫慣例所描述, (callSiteDesc) 。 calli指令可能緊接在tail前置詞前面 () Tailcall ,以指定在傳輸控件之前應該釋放目前的方法狀態。 如果呼叫將控制權轉移至高於原始方法的方法,則不會釋放堆棧框架;相反地,執行會以無訊息方式繼續,就像尚未提供 一樣 tail

方法專案指標假設是目標機器 (的特定指標,) 可以使用呼叫慣例所描述的自變數來合法呼叫, (獨立簽章的元數據令牌) 。 您可以使用 或 Ldvirtftn 指令來建立Ldftn這類指標,或從機器碼傳入。

呼叫慣例不會動態檢查,因此如果目的地實際上未使用指定的呼叫慣例,則使用 calli 指令的程式代碼無法正常運作。

自變數會以由左至右的順序放置在堆疊上。 也就是說,第一個自變數是計算並放在堆疊上,然後是第二個自變數,然後第三個自變數,直到所有必要自變數都以遞減順序停在堆疊上為止。 實例或虛擬方法的自變數建置程式代碼順序必須推送該實例參考 (,該參考不得為 null 參考) 任何使用者可見自變數之前。

SecurityException 如果系統安全性未授與呼叫端對呼叫方法的存取權,可能會擲回。 當 Microsoft 中繼語言 (MSIL) 指令轉換成機器碼,而不是在運行時間時,可能會進行安全性檢查。

下列 EmitCalli 方法可用來對堆疊執行 calli 指令。 請注意, calli 應該透過下列方法呼叫,而不是使用 Emit 類別直接將指令放在堆疊上。

適用於