zoukankan      html  css  js  c++  java
  • 详解C#动态调用委托的DLL的方法

       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("E:\\Test\\TestDll\\bin\\Debug\\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)
                {
                    throw new Exception(mEx.Message);
                }
                return (object)0;
            }
        }

  • 相关阅读:
    宋宝华:slab在内核内存管理和用户态Memcached的双重存在
    能感知功耗的Linux调度器(EAS)
    内存检测王者之剑—valgrind
    随心所动,厂商的CPU核管理策略介绍
    一文读懂 进程怎么绑定 CPU
    Fastbootd实现原理分析
    cachestat、cachetop、pcstat-linux系统缓存命中率分析工具
    WIFI的WPS和pin码(测试失败)
    视频下载(钉钉、B站等) 解决方案
    DevExpress 报表设计文件(.vsrepx)不显示或显示空白
  • 原文地址:https://www.cnblogs.com/xchit/p/1833305.html
Copyright © 2011-2022 走看看