標籤:c# 動態 載入 dll 反射
1、建立測試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);//載入當前根目錄的dll Assembly asm = Assembly.LoadFile(@"F:\WorkSpace\VS測試代碼\反射測試001\反射message方法\reflect\reflect\bin\Debug\reflect.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的!