2012-01-15 2 views
2

Я разрабатываю приложение на C++, которое должно быть совместимо с несколькими платформами (Windows/Linux), и хотите предоставить пользователям возможность расширения программного обеспечения в соответствии с их потребностями в точности, не позволяя им изменять критические части приложения (поэтому я не хочу их в коде на C++).Расширение приложения C++ со встроенными скриптами

То, что я ищу, это встроить язык сценариев (я бы предпочел Python, потому что я уже знаком с ним, но это не обязательно), поэтому скрипты, помещенные в какую-нибудь папку плагина, могут манипулировать объектами приложения, если я хочу эти объекты подлежат модификации.

Самый простой пример: если кто-то хочет создать собственный пользовательский интерфейс для моего приложения, они должны иметь возможность сделать это с помощью такого скрипта.

Проблема в том, что я никогда не добавлял C++ и любые внешние скрипты, поэтому я действительно не знаю, с чего начать. После поиска материала для начала я обнаружил, что Lua утверждает, что это хороший язык для этого, но я не смог найти хорошие уроки для начинающих.

Я был бы очень признателен, если бы кто-то знал хорошее место для начала, будь то онлайновые ресурсы или хорошая книга. Я бы не прочь потратить несколько долларов на хорошую книгу.

Как ученик, я стараюсь учиться лучше всего из сочетания примера кода и нескольких строк, объясняющих их.

+0

@ Хоссейн Спасибо за информацию. Исправлена. – nijansen

+0

Возможно, вас заинтересует [руководство по внедрению JavaScript с использованием V8] (http://code.google.com/apis/v8/embed.html). – jterrace

ответ

6

Я предлагаю вам прочитать Programming in Lua, эта книга содержит весь раздел о том, как вставлять Lua в C (и C++).

Это очень высокий рейтинг от Amazon users.

Язык также довольно хорош online documentation и активный mailing list.

+0

Из того, что я смог просмотреть до сих пор, эта книга выглядит наиболее перспективной. Я обязательно прочитаю это. Благодарю. – nijansen

0

для Python, я думаю, что библиотека boost предназначена для этого. Что касается Lua, я не использовал его сам, но быстрый поиск Google сначала привел меня к debian admin, а затем к Lua's C interface. Вы изучали их?

+0

Для Lua есть Luabind, который имеет корни в Boost Python и работает совершенно аналогично (и хорошо). –

+0

большое спасибо! Я раньше не использовал Lua и интересовался тем, как бы я начал. – guinny

1

Статья here at linux journal - хорошее место для начала использования интерпретатора python в коде c/C++. Это только половина битвы, однако, поскольку, когда интерпретатор встроен, вам необходимо опубликовать часть программного обеспечения в среде сценариев. Основной API для этого - в C, и если большая часть вашего кода - C++, лучше всего использовать boost :: python, поскольку писать обертки C вокруг ваших классов C++ могут быть громоздкими. Вы также можете использовать Py ++ для генерации привязки boost :: python.

Если вы хотите использовать скрипты как дверь для настройки, и вы можете жить с памятью на питоне, это может быть лучший выбор, чем Lua. Lua обычно хорош для небольших условий, таких как разработка игр. Существует также много разработчиков python, чем разработчики lua, а также больше встроенных и доступных сторонних библиотек.

3

Если вы хотите использовать Python, я бы определенно предложил использовать Boost.Python. Это невероятно хорошо спроектированная библиотека. Только один пример: все, что вам нужно сделать, чтобы открыть класс C++ в Python это:

struct World 
{ 
    void set(std::string msg) { this->msg = msg; } 
    std::string greet() { return msg; } 
    std::string msg; 
}; 

BOOST_PYTHON_MODULE(hello) 
{ 
    class_<World>("World") 
     .def("greet", &World::greet) 
     .def("set", &World::set) 
    ; 
} 

Он обрабатывает почти все автоматически: преобразования между типами, исключения, даже позволяет использовать опорные подсчитанные объекты между двумя языки с boost::shared_ptr.

+0

Звучит неплохо, а документация Boost также хорошо написана. Сегодня я посмотрю на это глубже. Благодарю. – nijansen

+0

Если вы используете Visual Studio для Windows, будет намного проще установить библиотеки, просто используйте установщик BoostPro: http://www.boostpro.com/download/ –

+0

К сожалению, нет, я работаю над этим проектом в пределах Debian, используя gcc 4.4.5, но спасибо за подсказку. – nijansen

Смежные вопросы