被调用的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; } } }