想做一个类似插件管理的功能,假若插件都是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;