zoukankan      html  css  js  c++  java
  • 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;

            }

        }

    }

  • 相关阅读:
    liunx-centos-基础命令详解(1) -主要内容来自 —https://www.cnblogs.com/caozy/p/9261224.html
    阿里云搭建香港代理服务器 shadownsocks
    ssh 操作 esxi 基本命令
    surpace pro 检测维修记录
    新的开始
    Linux就该这么学04学习笔记
    博客园添加旋转的正方体特效
    博客园添加鼠标动态线条
    day01 python初识、数据类型、流程控制
    Hadoop学习(1)-hdfs安装及其一些操作
  • 原文地址:https://www.cnblogs.com/seventeen/p/1682783.html
Copyright © 2011-2022 走看看