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