c# - 如何为 C# 应用程序开发 C++ 插件?
问题描述
我有加载插件 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);
}
我把.net 库项目IAPI
和BasePlugin
我的应用程序和所有插件都使用这个库。在我的项目中获取插件目录并使用以下代码加载插件:
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,有在 .Net 运行时中运行的Iron Python,并且在其中编写插件也应该相当容易。
对于其他语言,如 Java 和 matlab,没有简单的方法。每种语言都需要自己的运行时和环境,因此它们或多或少必须在单独的进程中运行并使用某种IPC机制来相互交互。
推荐阅读
- function - 我正在使用 opencv-3.4.1 并且不能使用 imshow()。认为没有库!我该如何解决?
- javascript - 广义咖喱 - Javascript
- python - 将对称对的数据框转换为数据透视表
- angularjs - 角度js网格选项
- html - HTML 表格未正确呈现
- sql - 如何在 PROC SQL for SAS 中按名称分组(返回错误消息)
- angular - 打字稿函数返回未定义
- javascript - jQuery | 如何将var添加到ajax url?
- html - 谷歌字体不能在本地设备上工作,但在所有其他设备上工作
- spring-mvc - 如何在 Thymeleaf 中显示货币符号?