我有加载插件 dll 并运行这些的 C# 应用程序。所有插件都继承自 BasePlugin
类(class)。我的应用程序将插件实例化为 BasePlugin
并与这些一起工作。例如获取插件名称、调用函数等。存在一个接口(interface),插件可以从我的应用程序调用 API 并与我的应用程序交互。
我的 BasePlugin
类(class):
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++/cli 中编写插件.这将生成一个托管 dll,就像插件是用 c# 编写的一样。
对于 Python,有 Iron Python它在 .Net 运行时中运行,并且在其中编写插件也应该相当容易。
对于其他语言,如 Java 和 matlab,没有简单的方法。每种语言都需要自己的运行时和环境,因此它们或多或少必须在单独的进程中运行并使用一些 IPC相互交互的机制。
关于c# - 如何为 C# 应用程序开发 C++ 插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61613330/