Лучший способ реализовать поддержку плагинов - PullRequest
5 голосов
/ 24 января 2011

У меня есть программное обеспечение на C ++ MFC, у которого есть некоторый открытый интерфейс для плагина, использующего экспорт на C.

Я собираюсь открыть программное обеспечение для сторонней разработки. Но использование экспорта на C предназначено для хардкорных программистов.

Как лучше всего это реализовать? Я слышал о LUA, но хочу знать о других возможностях.

Ответы [ 5 ]

3 голосов
/ 24 января 2011

Я думаю, что это действительно зависит от типа программы и вашей целевой аудитории. У WoW точно не было бы столько аддонов, сколько требовалось бы для написания C и компилятора. Но я уверен, что не хотел бы писать большой аддон в Lua.

Итак, прежде всего вам нужно решить, хотите ли вы использовать язык сценариев или скомпилированный язык. Если вы нацелены на случайных пользователей, то язык сценариев может быть лучшим выбором. Если вы нацелены на профессиональных разработчиков (скажем, на финансовый пакет, дополнения которого разрабатываются собственными программистами), то скомпилированный язык может работать лучше всего.

О, а также - почему бы вам не спросить кучу потенциальных разработчиков плагинов?

0 голосов
/ 24 января 2011

Реализация двоичного интерфейса с использованием экспортированных функций C для создания и возврата интерфейсов.

// your_plugin_header

// Plugins must implement this interface
struct PluginInterface {
  virtual void Release()=0;
  virtual void Method()=0;
  virtual void Method2()=0;
};


// Plugin dll's must export this function that creates a new object that implements
// the PluginInterface;
extern "C" bool CreatePluginObject(PluginInterface**);

Затем внедрите пример плагина в виде моста Lua / Javascript / Python и объедините его с программным обеспечением. Из коробки вы поддерживаете как тесно связанный интерфейс C ++, так и интерфейс плагина с высокой степенью написания сценариев, И, если кто-то предпочитает другой скрипт, он может сделать это самостоятельно.

0 голосов
/ 24 января 2011

Хотите привлечь людей?JavaScript горячийВстроенный двигатель v8.

http://code.google.com/apis/v8/embed.html

0 голосов
/ 24 января 2011

Мы используем соглашение c-naming и семейство функций dlopen\LoadLibrary для загрузки плагина (.dll или .so), находим 3 необходимых метода (create_plugin(), destroy_plugin() и get_type().

Разработчик плагина просто должен убедиться, что его эквивалент (на каком бы языке он не использовал) виден в библиотеке

extern "C" PLUGIN_API plugin_interface* create_plugin( arg_pack* );
extern "C" PLUGIN_API void destroy_plugin( plugin_interface* );
extern "C" PLUGIN_API const char* get_type();

В зависимости от того, для чего нужен ваш плагин, arg_pack можно заменить конкретными аргументами.

Ознакомьтесь с документацией для [gmodule][1], чтобы увидеть кроссплатформенную библиотеку, которая делает подобные вещи.

0 голосов
/ 24 января 2011

Если у вас есть примеры программирования экспорта C, которые вам подходят, я предлагаю вам отложить в сторону свои заранее заданные понятия «хардкор», и, как говорит Найк, «просто сделайте это».

Это может оказаться проще, чем вы ожидали.

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