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;

        }

    }

 

}

 

posted @ 2014-06-07 17:38  zzg168  阅读(247)  评论(0)    收藏  举报