OpCodes.Calli OpCodes.Calli OpCodes.Calli OpCodes.Calli Field

定義

呼び出し規約によって記述されている引数を使用して、評価スタックで (エントリ ポイントへのポインターとして) 指定されているメソッドを呼び出します。Calls the method indicated on the evaluation stack (as a pointer to an entry point) with arguments described by a calling convention.

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 

フィールド値

注釈

次の表は、命令の16進形式と Microsoft 中間言語 (MSIL) のアセンブリ形式と、簡単なリファレンスの概要を示しています。The following table lists the instruction's hexadecimal and Microsoft Intermediate Language (MSIL) assembly format, along with a brief reference summary:

形式Format アセンブリ形式Assembly Format 説明Description
29 < T >29 < T > 呼び出しcallSiteDescrcalli callSiteDescr 呼び出し規約によって記述された引数を使用して、が指すメソッドを呼び出します。Calls the method pointed to with arguments described by the calling convention.

スタックの移行動作は、次の順序で実行されます。The stack transitional behavior, in sequential order, is:

  1. arg1 からargNのメソッド引数はスタックにプッシュされます。Method arguments arg1 through argN are pushed onto the stack.

  2. メソッドのエントリポインターがスタックにプッシュされます。The method entry pointer is pushed onto the stack.

  3. メソッドのarg1引数argNとメソッドのエントリポインターはスタックからポップされ、メソッドの呼び出しが実行されます。Method arguments arg1 through argN and the method entry pointer are popped from the stack; the call to the method is performed. 完了すると、呼び出し先メソッドによって戻り値が生成され、呼び出し元に送信されます。When complete, a return value is generated by the callee method and sent to the caller.

  4. 戻り値はスタックにプッシュされます。The return value is pushed onto the stack.

命令calliは、を通じてargN引数arg1を指定してメソッドのエントリポインターを呼び出します。The calli instruction calls the method entry pointer with the arguments arg1 through argN. これらの引数の型は、特定の呼び出し規則 (callSiteDesc) によって記述されます。The types of these arguments are described by the specific calling convention (callSiteDesc). 命令calliの前tailにプレフィックス (Tailcall) を付けると、コントロールを転送する前に現在のメソッドの状態を解放するように指定できます。The calli instruction may be immediately preceded by a tail prefix (Tailcall) to specify that the current method state should be released before transferring control. 呼び出しによって、元のメソッドより高い信頼のメソッドに制御が転送される場合、スタックフレームは解放されません。代わりに、がtail指定されていないかのように、実行は暗黙的に続行されます。If the call would transfer control to a method of higher trust than the origin method the stack frame will not be released; instead, the execution will continue silently as if the tail had not been supplied.

メソッドのエントリポインターは、(ターゲットコンピューターの) ネイティブコードへの特定のポインターと見なされます。このポインターは、呼び出し規約 (スタンドアロン署名の場合はメタデータトークン) で記述された引数を使用して、正規的に呼び出すことができます。The method entry pointer is assumed to be a specific pointer to native code (of the target machine) that can be legitimately called with the arguments described by the calling convention (a metadata token for a stand-alone signature). このようなポインターは、 Ldftn命令またLdvirtftnは命令を使用して作成することも、ネイティブコードから渡すこともできます。Such a pointer can be created using the Ldftn or Ldvirtftn instructions, or passed in from native code.

呼び出し規約は動的にチェックされないため、指定さcalliれた呼び出し規約を変換先が実際に使用していない場合、命令を使用するコードは正常に機能しません。The calling convention is not checked dynamically, so code that uses a calli instruction does not work correctly if the destination does not actually use the specified calling convention.

引数は、左から右の順序でスタックに配置されます。The arguments are placed on the stack in left-to-right order. つまり、最初の引数が計算され、スタックに配置されます。次に、2番目の引数が、必要なすべての引数がスタックの一番上になるまで、3番目の引数が降順になります。That is, the first argument is computed and placed on the stack, then the second argument, then the third, until all necessary arguments are atop the stack in descending order. インスタンスまたは仮想メソッドの引数作成コードシーケンスは、ユーザーに表示される引数の前に、そのインスタンス参照 (null 参照ではない必要があります) をプッシュする必要があります。The argument-building code sequence for an instance or virtual method must push that instance reference (which must not be a null reference) before any of the user-visible arguments.

SecurityException呼び出されたメソッドへの呼び出し元アクセスがシステムセキュリティによって付与されていない場合にスローされる可能性があります。SecurityException may be thrown if the system security does not grant the caller access to the called method. セキュリティチェックは、Microsoft 中間言語 (MSIL) 命令が実行時ではなくネイティブコードに変換された場合に発生する可能性があります。The security check can occur when the Microsoft Intermediate Language (MSIL) instructions are converted to native code rather than at runtime.

EmitCalliのメソッドを使用して、スタックcalliで命令を実行できます。The following EmitCalli methods can be used to perform a calli instruction on the stack. は、 Emitクラスを使用して命令を直接スタックに配置するのではなく、以下のメソッドを通じて呼び出す必要があります。calliNote that calli should be called through the below methods rather than using the Emit class to place the instruction directly on the stack.

  • マネージ呼び出し規約を使用した呼び出しの場合は、ILGenerator EmitCalli (オペコード、CallingConventions、Type、Type []、Type [])。ILGenerator.EmitCalli(Opcode, CallingConventions, Type, Type[], Type[]) for calls using a managed calling convention.

  • アンマネージ呼び出し規約を使用した呼び出しの場合は、ILGenerator EmitCalli (オペコード、CallingConvention、Type、Type [])。ILGenerator.EmitCalli(Opcode, CallingConvention, Type, Type[]) for calls using an unmanaged calling convention.

適用対象