关键词:
方法调用指令主要有Call和Callvirt。
调用static或sealed修饰的方法,用Call指令。
调用virtual或abstract修饰的方法,用Callvirt指令。
代码实例:
ilGenerator.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[] typeof(int)));
msil实用指南-类相关生成(代码片段)
一、创建class用MethodBuilder的DefineType方法,可以指定父类,得到一个TypeBuilder对象。二、实现继承接口用TypeBuilder的AddInterfaceImplementation方法。三、显示方法重写用TypeBuilder的DefineMethodOverride方法。完整代码如下: usingSystem;usingSyst... 查看详情
msil实用指南-创建方法和定义参数(代码片段)
本篇讲解实现创建方法、指定参数的名称、实现参数加out和ref修饰符、以及参数加默认值。创建方法创建方法用类TypeAttributes的DefineMethod(stringname,MethodAttributesattributes,TypereturnType,Type[]parameterTypes)方法,返回结果是MethodBuilder,... 查看详情
msil实用指南-闭包的生成和调用(代码片段)
闭包(Closure)是词法闭包(LexicalClosure)的简称。对闭包的具体定义有很多种说法,这些说法大体可以分为两类:一种说法认为闭包是符合一定条件的函数,比如参考资源中这样定义闭包:闭包是在其词法上下文中引用了自由变... 查看详情
msil实用指南-生成属性(代码片段)
本篇讲解怎么生成属性,包括get和set方法。第一步,生成一个字段生成字段用TypeBuilder.DefineField方法。实例代码:FieldBuildercustomerNameBldr=typeBuilder.DefineField("_CustomerName",typeof(string),FieldAttributes.Private); 第二步,创建一个Property 查看详情
msil实用指南-局部变量的声明保存和加载(代码片段)
这一篇讲解方法内的局部变量是怎么声明、怎样保存、怎样加载的。声明局部变量声明用ILGenerator的DeclareLocal方法,参数是局部变量的数据类型,得到一个局部变量对应的创建类LocalBuilder。使用格式是LocalBuilderlocalBuilderx=ilGenerator... 查看详情
msil实用指南-比较运算(代码片段)
数值的比较就是大于、小于、等于、大于等于、小于等于、不等于,它们的运算结果都是布尔值。大于、小于、等于有直接对应的指令,分别是Cgt、Clt、Ceq。大于等于、小于等于、不等于没有直接对应的指令,它的运算实现一般... 查看详情
msil实用指南-字段的加载和保存(代码片段)
字段有静态字段和非静态字段之分,它们的加载保存指令也是不一样的,并且非静态字段要生成this。静态字段的加载加载静态字段的指令是Ldsfld。ilGenerator.Emit(OpCodes.Ldsfld,<FieldBuilder>);实际例子ilGenerator.Emit(OpCodes.Ldsfld,are... 查看详情
msil实用指南-加载nullstringlongfloatdouble等值(代码片段)
本篇讲述怎么加载null、string值、long值、float值、double值。加载null不需要参数值,只要Emitldnull其它几个命令要Emit<指令><值> 加载null加载null是很简单的,使用OpCodes.Ldnull,以下一句程序就可以了。ilGenerator.Emit(OpCodes.Ld... 查看详情
msil实用指南-数据类型转换
一、类的强制转换1.转换成某个类用Castclass指令。实例代码:ilGenerator.Emit(OpCodes.Castclass,typeof(ClassA));2.转换成某个值类型用Unbox_Any指令。实例代码:ilGenerator.Emit(OpCodes.Unbox_Any,typeof(DateTime));ilGenerator.Emit(OpCodes.Unbox_Any 查看详情
msil实用指南-生成for语句
for语句格式是这样的for(<初始化语句>;<条件语句>;<自增减语句>) <循环体>它可以转换为while语句if(<条件语句>) <初始化语句> while(<条件语句>) <循环体> <自增减语句> 那么就可以按照这while... 查看详情
浅析msil中间语言——基础篇(代码片段)
...,这是我了解MSIL的主要原因。托管代码表示应用程序的方法的功能,它们以微软的中间语言(Microsoftintermediatelanguage,MSIL)或公共语言运行(comm 查看详情
vim实用指南和系统相互复制粘贴(代码片段)
文章目录依赖检查vim复制到系统剪切板系统剪切板复制到vim中放大招依赖检查要完成vim中的内容复制到系统剪切板,需要vim支持+clipboard,检查的方法(ubuntu16.04为例):打开terminal(ctl+alt+t)输入vim--version|grepclipboard你会得到这... 查看详情
热键调用三方程序---实用方法(代码片段)
1.问题或需求描述:热键调用三方程序2.解决方法:使用AutoIt3脚本语言,可以快速编写出热键主调程序。3.例如:利用热键调用三方程序,实现特定需要。例程中,我们实现按“F4”键时调起三方程序,实现清除电脑上的所有蓝牙... 查看详情
shgreg的伟大指南:包,库,实用程序和工具(代码片段)
jni/ndk开发指南——调用构造方法和父类实例方法(代码片段)
...ff0c;一带而过了。还没有阅读过的同学请移步《JNI/NDK开发指南(六)——C/C++访问Java实例方法和静态方法》阅读。这章详细来介绍下初始一个对象的两种方式 查看详情
使用monocecil对msil进行注入(代码片段)
...,内有Class1类型,我们需要动态创建其对象,并调用Test方法。注入的要求是在执行Test内部代码前先执行一个外部程序集的方法InjectMethod。 class Class1 void Test() Console.WriteLine("Hello, World!"); 注入代码&nb... 查看详情
javascriptyui配置实用程序指南(代码片段)
binder实用指南-实战篇(代码片段)
本章的内容主要说明如何在JavaFramework层和Native层自定义Client-Server组件,并且使用Binder进行通信。一、NativeBinder源码目录结构:alps/frameworks/native/cmds/NativeBinderDemo/ 123456 |-NativeBinderDemo|---ClientDemo.cpp:客户端程序|---Serve 查看详情