Инструменты пользователя

Инструменты сайта


lm2:ce:s_pl

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
lm2:ce:s_pl [2020/07/31 21:02]
ruben создано
lm2:ce:s_pl [2020/11/30 14:12] (текущий)
Строка 1: Строка 1:
 ===== Плагины и их разработка ===== ===== Плагины и их разработка =====
 +
 +Для расширения функционала платформы можно использовать плагины, которые представляют из себя динамически подгружаемые библиотеки. Каждый плагин реализует функции Get/Set, доступные непосредственно из lua скрипта и механизм, позволяющий генерировать события. Плагин подключается через главный конфигурационный файл:
 +
 +<code>
 +<Plugin ID="<имя_плагина>" Type="library" Name="<имя_файла_библиотеки>" />
 +
 +</code>
 +
 +Далее, после успешной загрузки плагина, доступ к нему можно получить из lua:
 +
 +<code>
 +Get('<имя_плагина>:<какой-то_адрес>')
 +
 +</code>
 +
 +или
 +
 +<code>
 +Set('<имя_плагина>:<какой-то_адрес>=<какое-то_значение>')
 +
 +</code>
 +
 +**Написание плагина (Windows)**
 +
 +Создаем DLL, например через Visual Studio. Из DLL должны быть экспортированы функции: Set(…), Get(…) и PollEvents(…). Функции Get/Set вызываются напрямую через lua скрипт. PollEvents вызывается автоматически, перед рендером каждого кадра. Она должна возвратить строку, вида:
 +
 +<code>
 +"<какой-то_адрес>=<какое-то_значение>"
 +
 +</code>
 +
 +если надо сгенерировать событие или строку
 +
 +<code>
 +"[NULL_STRING]"
 +
 +</code>
 +
 +если не надо.
 +
 +**Заголовочный файл с прототипами этих функций (lmuLib.h):**
 +<code cpp>
 +#pragma once
 +#include <string>
 +
 +#ifdef LMULIB_EXPORT
 +  #define LMULIB_API extern "C" declspec(dllexport)
 +#else
 +  #define LMULIB_API extern "C" declspec(dllimport)
 +#endif
 +
 +#pragma warning(push)
 +#pragma warning(disable:4190)
 +
 +LMULIB_API bool Set(const std::string& _param);
 +LMULIB_API std::string Get(const std::string& _addr);
 +LMULIB_API std::string PollEvents();
 +
 +#pragma warning(pop)
 +
 +
 +</code>
 +
 +==== Написание плагина (Linux) ====
 +
 +Все аналогично.
 +
 +**Заголовочный файл (lmuLib.h):**
 +<code cpp>
 +#pragma once
 +#include <string>
 +
 +extern "C" {
 +  bool Set(const std::string& _param);
 +  std::string Get(const std::string& _addr);
 +  std::string PollEvents();
 +}
 +
 +
 +</code>
 +
 +Для того, чтобы скомпилировать динамически загружаемую библиотеку, используем примерно такие команды:
 +
 +<code bash>
 +g++ -std=c++11 -c *.cpp -fPIC
 +g++ -shared -o libplugin.so -std=c++11 *.o
 +
 +
 +</code>
  
  
lm2/ce/s_pl.1596218577.txt.gz · Последнее изменение: 2020/11/30 14:12 (внешнее изменение)