クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
.NET 開発
.NET Framework 3.5
.NET Framework 3.5
OpCodes クラス
OpCodes フィールド
 Calli フィールド

  低帯域幅での表示をオンにする
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2008/.NET Framework 3.5

その他のバージョンについては、以下の情報を参照してください。
.NET Framework クラス ライブラリ
OpCodes..::.Calli フィールド

更新 : 2007 年 11 月

呼び出し規約によって記述されている引数を使用して、評価スタックで (エントリ ポイントへのポインタとして) 指定されているメソッドを呼び出します。

名前空間 :  System.Reflection.Emit
アセンブリ :  mscorlib (mscorlib.dll 内)

Visual Basic (宣言)
Public Shared ReadOnly Calli As OpCode
Visual Basic (使用法)
Dim value As OpCode

value = OpCodes.Calli
C#
public static readonly OpCode Calli
Visual C++
public:
static initonly OpCode Calli
J#
public static final OpCode Calli
JScript
public static final var Calli : OpCode

命令の 16 進数の形式、MSIL (Microsoft Intermediate Language) アセンブリ形式、および簡単な説明の一覧を次の表に示します。

形式

アセンブリ形式

説明

29 < T >

calli callSiteDescr

呼び出し規約によって記述されている引数を使用して、ポインタが指しているメソッドを呼び出します。

スタックの遷移動作を順番に示すと、次のようになります。

  1. メソッド引数の arg1 から argN までがスタックにプッシュされます。

  2. メソッド エントリ ポインタがスタックにプッシュされます。

  3. メソッド引数の arg1 から argN まで、およびメソッド エントリ ポインタがスタックからポップされます。メソッドの呼び出しが実行されます。完了すると、呼び出し先メソッドによって戻り値が生成され、呼び出し元へ送られます。

  4. 戻り値がスタックにプッシュされます。

calli 命令は、引数 arg1 から argN を使用して、メソッド エントリ ポインタを呼び出します。これらの引数の型は、特定の呼び出し規約 (callSiteDesc) に記述されています。calli 命令の直前に tail プリフィックス (Tailcall) を置くことによって、制御を転送する前に現在のメソッドの状態を解放するように指定できます。呼び出しによって、元のメソッドより信頼性の高いメソッドに制御が転送される場合、スタック フレームは解放されません。その代わりに、tail が提供されなかったかのように、実行が継続されます。

メソッド エントリ ポインタは、呼び出し規約 (スタンドアロン シグネチャのメタデータ トークン) によって記述されている引数を使用して正当に呼び出すことができる、ターゲット コンピュータのネイティブ コードへの固有のポインタであると見なされます。メソッド エントリ ポインタは、Ldftn 命令または Ldvirtftn 命令を使用して作成する場合も、ネイティブ コードから渡される場合もあります。

呼び出し規約は動的にはチェックされないため、指定した呼び出し規約を呼び出し先が使用していない場合、calli 命令を使用するコードは正しく動作しません。

引数は、スタック上に左から右に配置されます。つまり、まず最初の引数が計算されてスタックに配置され、次に 2 番目の引数、その次に 3 番目の引数が同様に配置され、最終的に必要なすべての引数が降順でスタックに配置されます。インスタンス メソッドまたは仮想メソッドの引数構築コード シーケンスは、ユーザーが参照できる引数の前に、そのインスタンス参照 (null 参照以外) をプッシュする必要があります。

システム セキュリティが呼び出し元に対して呼び出すメソッドへのアクセスを許可していない場合は、SecurityException がスローされることがあります。セキュリティ チェックは、実行時ではなく、MSIL (Microsoft Intermediate Language) 命令がネイティブ コードに変換されるときに発生する場合があります。

スタックの calli 命令を実行するために使用できる EmitCalli メソッドを次に示します。命令を直接スタックに配置するには、Emit クラスを使用するのではなく、次のメソッドを通じて calli を呼び出す必要があります。

  • ILGenerator.EmitCalli(Opcode, CallingConventions, Type, Type[], Type[]) (マネージ呼び出し規約を使用して呼び出す場合)

  • ILGenerator.EmitCalli(Opcode, CallingConvention, Type, Type[]) (アンマネージ呼び出し規約を使用して呼び出す場合)

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework および .NET Compact Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

.NET Framework

サポート対象 : 3.5、3.0、2.0、1.1、1.0
コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker