【发布时间】:2020-05-05 12:37:42
【问题描述】:
我有加载插件 dll 并运行这些的 C# 应用程序。所有插件都继承自 BasePlugin 类。我的应用程序将插件实例化为BasePlugin 并使用它们。例如获取插件名称、调用函数等。存在一个接口,插件可以从我的应用程序调用 API 并与我的应用程序交互。
我的BasePlugin 班级:
public abstract class BasePlugin{
public abstract string Name {get;}
public abstract int A {get;set;}
public abstract void Do(IAPI api);
}
IAPI接口:
public interface IAPI
{
void F1();
int F2(int a);
}
我将IAPI 和BasePlugin 放在.net 库项目中,我的应用程序和所有插件都使用这个库。在我的项目中获取插件目录并使用此代码加载插件:
public List<BasePlugin> GetAllPlugins(string dir)
{
List<BasePlugin> plugins = new List<BasePlugin>();
foreach (string dll in Directory.GetFiles(dir, "*.dll"))
{
Assembly loadedAssembly = Assembly.LoadFrom(dll);
List<Type> types = loadedAssembly.GetTypes().Where(t => t.IsSubclassOf(typeof(BasePlugin))).ToList();
foreach (Type t in types)
{
plugins.Add((BasePlugin)Activator.CreateInstance(t));
}
}
return plugins;
}
我开发 C# 插件很容易。但是如何为我的应用程序开发 C++、Python、Java、matlab 等插件?
【问题讨论】:
-
用 c# 编写你的插件,然后让插件调用一个 C++ dll。您也可以使用 c++-cli,但通常只使用带有 C API 的编组接口更简单。