Как реализовать язык сценариев в приложение C?

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

  1. установить правильную package структуру папок <manifest> в AndroidManifest.xml.
  2. Установите новое местоположение пакета для android:name из <activity> в AndroidManifest.xml.
  3. Очистить кэш с помощью

Меню «Файл» -> «Недействительные кэши / перезапуск ...»

Проблема исчезнет, ​​как только Android-студия перезапустится и создаст новый индекс.

14
задан Michael Stum 21 July 2009 в 10:32
поделиться

8 ответов

Вот документ с веб-сайта Python для встраивания Python 2.6 ...

http://docs.python.org/exnding/embedding.html

7
ответ дан 1 December 2019 в 06:04
поделиться
16
ответ дан 1 December 2019 в 06:04
поделиться

Lua разработан именно для этой цели, и с ним довольно легко работать.

Еще одна вещь, на которую стоит обратить внимание, - это QtScript , который основан на Javascript, хотя это потребует некоторой работы по "qt-ify" вашему приложению.

3
ответ дан 1 December 2019 в 06:04
поделиться

Большинство языков сценариев допускают встраивание в C и обычно позволяют предоставлять сценарию определенные объекты или даже функции из кода C, чтобы он мог манипулировать объектами и вызывать функции.

Как сказал Lua, предназначенный для этой цели встраивания, используя интерпретатор, вы можете открывать объекты для сценария и вызывать функции lua из C, искать , встраивать lua в C , и вы должны найти много информации, также не Не пропустите раздел руководства lua «Интерфейс прикладного программирования»

Хотя Python более подходит для автономного использования, его также можно встраивать, это может быть полезно в случае, если ваши сценарии используют огромное количество библиотек, поставляемых с Python.

1
ответ дан 1 December 2019 в 06:04
поделиться

Lua. Он занимает очень мало места, довольно быстр, и я обнаружил (субъективно), что у него самый приятный API для взаимодействия с C.

Если вы хотите прикоснуться к объектам Lua из C - это довольно просто, используя встроенный в API. Если вы хотите прикоснуться к данным C из Lua - это немного больше работы, обычно вам нужно создать методы оболочки, чтобы раскрыть то, что вы хотите разрешить Lua изменять.

Небольшая база кода и жесткий контроль над количеством Библиотеки по умолчанию, введенные в ваш встроенный интерпретатор, также означают, что вы можете делать разумные предположения по поводу безопасности.

Единственная странная часть - это нумерация массивов на основе 1, однако это не было таким уж большим делом по сравнению с тем, что я думал, учитывая существование итераторов.

Как интегрироваться с C: в архиве дистрибутива для Lua есть каталог "

17
ответ дан 1 December 2019 в 06:04
поделиться

Вы также можете ознакомиться с SWIG , упрощенной оболочкой и генератором интерфейсов. Как можно догадаться, он генерирует большую часть стандартного кода для взаимодействия вашего кода C / C ++ с механизмом написания сценариев (что может быть довольно громоздким для выполнения вручную).

Он поддерживает Python и Lua (ваши предпочтения) и многие другие языков. Сгенерировать модуль, расширяющий язык сценариев, довольно просто. Расширение встраивания и , которое вы желаете, требует немного больше усилий.

3
ответ дан 1 December 2019 в 06:04
поделиться

Вы можете взглянуть на Game Scripting Mastery . Поскольку я интересуюсь аспектом компьютерных игр высокого уровня, мне очень часто рекомендуют эту книгу.

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

2
ответ дан 1 December 2019 в 06:04
поделиться

Lua полностью оптимизирован для такого встраивания. Хорошей отправной точкой является книга Роберто Иерусалимши Программирование на Lua ; предыдущее издание можно бесплатно получить в Интернете .

Как ваш сценарий узнает о свойствах вашего объекта C?

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

typedef struct my_object *Object;
Object some_object;

Что означает ваш код C знает о свойствах этого объекта? Почти ничего, вот что. Все, что вы можете сделать, это

  • передавать указатели на объект, помещать их в структуры данных и т. Д.

  • Вызывать функции, которые действительно знают, что находится внутри struct my_object .

Lua получает доступ к Объекты C точно так же: косвенно через функции:

  • Вы делаете вызовы API, чтобы поместить указатель на объект в стеке Lua, из которых он может перейти в структуры данных Lua, переменные или где-нибудь еще во вселенной Lua.

  • Вы определяете функции, которые знают о внутреннем устройстве объекта, и экспортируете эти функции в Lua.

  • Здесь много всего. во «вспомогательной библиотеке» вам в помощь. Не упускайте из виду!

Все это с кристальной ясностью объясняется в третьей части книги Роберто, которая включает примеры. Один из замечательных моментов:

  • У вас есть выбор: выделить память самостоятельно («легкие пользовательские данные») или позволить Lua выделить память. Обычно лучше, чтобы Lua выделял память, потому что он может автоматически освобождать объект, когда он больше не нужен, и вы также можете связать метатаблицу Lua , что позволяет вам (среди других уловок) разрешить объекту участвовать в стандартных операциях Lua, таких как поиск полей, а не только в вызовах функций.

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

8
ответ дан 1 December 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: