当前位置: 代码迷 >> C# >> 一个C#动态加载插件有关问题
  详细解决方案

一个C#动态加载插件有关问题

热度:69   发布时间:2016-05-05 02:39:28.0
一个C#动态加载插件问题
想做一个类似插件管理的功能,假若插件都是C,C++之类的,无需注册的插件。
有多个插件msg.dll,msg1.dll,msg2.dll,msg3.dll等,每个插件里面的方法接口都是相同的,只是返回值不同,我现在只调用msg.dll的话,使用下面的代码可以正常使用,如果有多个插件,需要在程序运行时,手动选择运行哪一个和哪几个插件,应该怎么写代码,请指教,谢谢!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace 调用DLL
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        [DllImport("msg.dll")]
        public static extern void msg(string text);
 
        private void button2_Click(object sender, EventArgs e)
        {
            msg("调用DLL成功!");
        }
    }
}

------解决思路----------------------
那只能使用LoadLibrary+GetProcAddress
        [DllImport("kernel32.dll")]
        private extern static IntPtr LoadLibrary(string path);

        [DllImport("kernel32.dll")]
        private extern static IntPtr GetProcAddress(IntPtr lib, string funcName);

        [DllImport("kernel32.dll")]
        private extern static bool FreeLibrary(IntPtr lib);

------解决思路----------------------
搜一下MEF机制,.net 自带的有,很好用。需要引用using System.ComponentModel.Composition;
  相关解决方案