被調用的TestDll.dll文件主要代碼:
using System; using System.Collections.Generic; using System.Text; namespace TestDll { public class TestDll { public string HandleStr(string str) { return "["+str + "]"; } } }
調用 TestDll.dll的HandleStr方法的代碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Reflection; namespace DynamicInvokeDll { public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); } private void FrmMain_Load(object sender, EventArgs e) { object[] obj = new object[1]; obj[0] = "DllInvoke"; object o2 = DllInvoke("TestDll.dll", "TestDll", "TestDll", "HandleStr", obj); MessageBox.Show(o2.ToString()); } /// <summary> /// 動態調用DLL /// </summary> /// <param name="DllFileName">dll名稱</param> /// <param name="NameSpace">命名空間</param> /// <param name="ClassName">類名</param> /// <param name="MethodName">方法名</param> /// <param name="ObjArrayParams">參數數組</param> /// <returns></returns> private object DllInvoke(string DllFileName, string NameSpace, string ClassName, string MethodName, object[] ObjArrayParams) { try { //載入程序集 Assembly DllAssembly = Assembly.LoadFrom(DllFileName); Type[] DllTypes = DllAssembly.GetTypes(); foreach (Type DllType in DllTypes) { //查找要調用的命 名空間及類 if (DllType.Namespace == NameSpace && DllType.Name == ClassName) { //查找要調用的方 法並進行調用 MethodInfo MyMethod = DllType.GetMethod(MethodName); if (MyMethod != null) { object mObject = Activator.CreateInstance(DllType); return MyMethod.Invoke(mObject, ObjArrayParams); } } } } catch (Exception mEx) { } return (object)0; } } }