C#中如何动态加载Dll2014-10-071、新建测试dll及方法,用vs2010新建winform程序,具体代码如下:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms; namespace reflect{public partial class Form1 : Form{public Form1(){InitializeComponent();}public string TestReflect(){MessageBox.Show("动态加载Dll测试");return "TestReflect返回值";}}}
2、动态加载代码
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Reflection; namespace reflectTest{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){//加载dll中的函数//Assembly asm = Assembly.Load(strDllPath);//加载当前根目录的dllAssembly asm = Assembly.LoadFile(@"F:WorkSpaceVS测试代码反射测试001反射message方法
eflect
eflectinDebug
eflect.dll");//根据dll文件实际路径加载//用类型的命名空间和类获得类型System.Type FromClass = asm.GetType("reflect.Form1");//需要实例化类型,才可以使用,参数可以人为的指定,也可以无参数,静态实例可以省略Object obj = System.Activator.CreateInstance(FromClass);//通过方法名称获得方法(调试走到下面这一步的时候,就可以弹出“动态加载Dll测试”这个消息了)MethodInfo method = FromClass.GetMethod("TestReflect");//获取TestReflect函数的返回值,在这里会获取到"TestReflect返回值",如果没有返回值,可以省略这一步object o = method.Invoke(obj, new object[] { });}}}
小注:通过方法名称获得方法中的方法必须是public的!本文URL:http://www.bianceng.cn/Programming/csharp/201410/45595.htm