c# - 如何为 C# 应用程序开发 C++ 插件?

标签 c# c++ plugins

我有加载插件 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);
}

我把 IAPIBasePlugin在 .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/

相关文章:

C# 基于时间的自定义事件

c++ - 我应该使用静态还是命名空间?

google-chrome - Google Chrome Native Client 与插件或扩展程序的比较

c# - 同时运行不同的表单

c# - 其中 T : class to VB

c# - 从 dll 调用 opencv Mat 到 Windows 窗体,图像出现故障

c++ - 确保指向父类(super class)的指针指向C++中某个子类的对象

c++ - C++中按值传递和按引用传递的区别

javascript - 是否有处理多个时区和适当的夏令时的 jQuery 日期格式化程序插件?

javascript - TinyMCE 为 windowManager 添加自定义控件