C# 動態調用委托的DLL


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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM