Обтекание класса c ++ для использования его в Lua с использованием SWIG - нужен простой пример - PullRequest
2 голосов
/ 28 января 2012

Я абсолютный новичок в том, что касается использования SWIG и lua, и посредственный разработчик C ++, и я просто не понимаю, как я могу связывать классы C ++ с Lua.

Моя конечная цель - создать экземпляр класса, передать его моему скрипту lua, который определенным образом манипулирует этим объектом, затем я получаю этот объект в c ++ и делаю все, что я хочу с ним делать.

Итак ... Я скачал Lua и C ++, скомпилировал несколько примеров, я могу запустить скрипт lua в моей программе на c ++. Пока все хорошо.

Теперь я скачал SWIG. Я использую VC2010 на Windows 7. Из того, что я понимаю, я предполагаю создать файл интерфейса. Итак, я создал один, example.i:

%module creature
class Creature
{
public:
    Creature(void);
    Creature(int id);
    ~Creature(void);

(...) the rest of my class here

(Просто добавил% существо модуля в мой Creature.h и сохранил его как creature.i). Я запустил SWIG, используя

 swig -c++ -lua creature.i

и получил мой файл creature.cxx.

Теперь, я, наверное, сейчас смущаюсь, но ... я не знаю, что делать дальше. Я предполагаю, чтобы построить выходной файл как-то? Как я могу использовать это сейчас? Я прочитал здесь http://www.swig.org/Doc1.3/Lua.html, что мне нужно связать сгенерированный файл (* .cxx) с остальной частью моего кода (поэтому я делаю это, просто включив файл в мой проект и добавив строку #include " Creature.h "). Но когда я компилирую, я получаю ошибки типа

error C2065: 'LUA_GLOBALSINDEX' : undeclared identifier
error C2036: 'const luaL_reg *' : unknown size

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

Любая помощь будет высоко ценится.

Ответы [ 2 ]

2 голосов
/ 28 января 2012

SWIG - это инструмент для связи языков сценариев с кодом C или C ++. Он работает как препроцесс шаг: вы запускаете исполняемый файл SWIG в файле .swig, который создает немного кода на C или C ++. Затем вы встраиваете этот код в любой проект, для которого хотите создать ссылку на этот язык сценариев.

Поддержка Lua в SWIG наверняка не совместима с Lua 5.2. Действительно, вы найдете очень мало кода, совместимого с Lua 5.2. Если вы действительно хотите что-то сделать с кодом Lua, придерживайтесь, по крайней мере, версии 5.1.

1 голос
/ 05 ноября 2012

Моя конечная цель - получить экземпляр класса, передать его моему Луа скрипт, который манипулирует этим объектом определенным образом, затем я получаю этот объект в C ++ и делать все, что я хочу с ним делать.

Я могу ошибаться, но вы не «передаете» экземпляр классов C ++ Lua, в действительности вы создаете привязки C ++ к Lua, в результате чего вы фактически создаете экземпляр класса C ++ в самом скрипте Lua. 1005 *

Т.е., скажем, у вас есть класс C ++ с именем Foo с единственным методом add (x, y). Затем вы можете создать и использовать этот класс в Lua, выполнив что-то вроде (при условии, что вы использовали Swig для создания файла оболочки).

foo_instance = Foo()
foo_instance:add(4, 3)

У меня были некоторые несчастья при использовании Swig и Lua с моей программой на C ++, поэтому я написал учебник (чтобы не забыть, как я это сделал). Вы можете посмотреть его здесь ... http://glennmccord.wordpress.com/2012/11/05/binding-c-to-lua-using-swig/

Надеюсь, это поможет вам начать.

...