C#動態調用委託的DLL

來源:互聯網
上載者:User

被調用的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;

        }

    }

 

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.