• 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;

            }

        }

    }

  • 相关阅读:
    Codeforces461E Appleman and a Game 做题心得
    关于贪心问题的处理
    各种容斥 笔记
    博弈论 笔记
    家庭多个路由器组网方案(AP+AC)
    21.06.06 训练赛
    Redirect...
    Web Api实践系列(三)route特性使用
    《Red Tuner》隐私政策
    前缀和-1915. 最美子字符串的数目
  • 原文地址:https://www.cnblogs.com/seventeen/p/1682783.html
Copyright © 2020-2023  润新知