• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Seventeen's Space
博客园    首页    新随笔    联系   管理    订阅  订阅
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 on 2010-03-10 17:28  Seventeen  阅读(1198)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3