首页 > 解决方案 > 如何为 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 库项目IAPIBasePlugin我的应用程序和所有插件都使用这个库。在我的项目中获取插件目录并使用以下代码加载插件:

    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++plugins

解决方案


对于 c++,您可以在c++/cli中编写插件。这将生成一个托管 dll,就像插件是用 c# 编写的一样。

对于 Python,有在 .Net 运行时中运行的Iron Python,并且在其中编写插件也应该相当容易。

对于其他语言,如 Java 和 matlab,没有简单的方法。每种语言都需要自己的运行时和环境,因此它们或多或少必须在单独的进程中运行并使用某种IPC机制来相互交互。


推荐阅读