OpCodes.Calli フィールドとは? わかりやすく解説

OpCodes.Calli フィールド

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

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

解説解説

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

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

  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呼び出す必要があります

プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
OpCodes クラス
OpCodes メンバ
System.Reflection.Emit 名前空間



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

OpCodes.Calli フィールドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



OpCodes.Calli フィールドのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2024 Microsoft.All rights reserved.

©2024 GRAS Group, Inc.RSS