【问题标题】:How to develop C++ plugin for C# application?如何为 C# 应用程序开发 C++ 插件?
【发布时间】: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);
}

我将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 等插件?

【问题讨论】:

  • 从原生库制作插件归结为加载原生库并手动路由所有内容。第一步:如何加载库 - click(寻找更好的问题/答案),第二步:路由方法 - click..
  • 用 c# 编写你的插件,然后让插件调用一个 C++ dll。您也可以使用 c++-cli,但通常只使用带有 C API 的编组接口更简单。

标签: c# c++ plugins


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多