Как разработать плагин на C ++ для приложения C#? - PullRequest
2 голосов
/ 05 мая 2020

У меня есть C# приложение, которое загружает dll подключаемых модулей и запускает их. Все плагины наследуются от класса 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);
}

Я поместил 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, ... для моего приложения?

1 Ответ

0 голосов
/ 05 мая 2020

Для c ++ вы можете написать свой плагин на c ++ / cli . Это создаст управляемую dll, как если бы плагин был написан на c#.

Для Python существует Iron Python, который работает в среде выполнения. Net, и также должно быть довольно легко написать плагин.

Для на других языках, таких как Java и matlab, нет простого пути. Для каждого языка требуется собственная среда выполнения и среда, поэтому они более или менее должны работать в отдельных процессах и использовать какой-то механизм IP C для взаимодействия друг с другом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...