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;

            }

        }

    }

  • 相关阅读:
    C语言函数手册—函数分类列表
    HTTP协议详解(一直在用可是这篇太好了转一下)
    Substance风格实例大全javaswing皮肤风格大全(原)
    Component creation must be done on Event Dispatch Thread错误解决方法
    用开源Look&Feel (Substance)写 漂亮的Swing应用程序
    Swift翻译之-关于Swift
    Swift翻译之-Swift语法入门 Swift语法介绍
    Swift语言简介+快速上手
    JDK各个版本的新特性jdk1.5-jdk8
    5个常用Java代码混淆器 助你保护你的代码
  • 原文地址:https://www.cnblogs.com/seventeen/p/1682783.html
Copyright © 2011-2022 走看看