C#动态调用委托的DLL

被调用的TestDll.dll文件主要代码:

using System;<?xml namespace="" ns="urn:schemas-microsoft-com:office:office" prefix="o" ?>

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;

        }

    }

 

}

转载于:https://www.cnblogs.com/seventeen/archive/2010/03/10/1682783.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值