Hey Guys,
I'm finding it quite easy to go from C++ to Lua in terms exposing functionality, but the other way around I'm not really understanding how to do it. I have C++ function void addObject(luabind::object) { // Get Base ptr // Call lua objects method. } How do I get the base pointer of this object (amusing its both wrapped and inherited), and also how do I call its lua methods. I thought the classes would be just tables, but they dont seem to return LUA_TTABLE. Thanks Phil. ------------------------------------------------------------------------------ RSA® Conference 2012 Save $700 by Nov 18 Register now! http://p.sf.net/sfu/rsa-sfdev2dev1 _______________________________________________ luabind-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/luabind-user |
hi Phil,
pointer from luabind::object: Base* ptr = luabind::object_cast<Base*>(myobject); as for the method call: do you derive from a C++ class in Lua and do you want to call a method from the C++ interface, or do you want to call a method that has been added in Lua, but wasn't part of the original interface? In any case, you can resort to a Lua style construction which should always work. luabind::object method = globals(L)["MyClass"]["methodName"]; int result = luabind::call_function<int>(method, instance, additionalParams) which would be equivalent to Lua: result = instance:methodName(additionalParams) or alternatively result = MyClass.methodName(instance, additionalParams) hth, Tony On 02.11.2011, at 17:37, Phil Cooper-King wrote: > Hey Guys, > > I'm finding it quite easy to go from C++ to Lua in terms exposing > functionality, but the other way around I'm not really understanding > how to do it. > > I have C++ function > void addObject(luabind::object) > { > // Get Base ptr > // Call lua objects method. > } > > How do I get the base pointer of this object (amusing its both wrapped > and inherited), and also how do I call its lua methods. > > I thought the classes would be just tables, but they dont seem to > return LUA_TTABLE. > > Thanks > Phil. > > ------------------------------------------------------------------------------ > RSA® Conference 2012 > Save $700 by Nov 18 > Register now! > http://p.sf.net/sfu/rsa-sfdev2dev1 > _______________________________________________ > luabind-user mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/luabind-user ------------------------------------------------------------------------------ RSA® Conference 2012 Save $700 by Nov 18 Register now! http://p.sf.net/sfu/rsa-sfdev2dev1 _______________________________________________ luabind-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/luabind-user |
Thanks Tony,
there must be something else going on. Base* ptr = luabind::object_cast<Base*>(myobject); causes a crash, and also luabind::object method = globals(L)["MyClass"]["methodName"]; int result = luabind::call_function<int>(method, instance, additionalParams) causes a crash. this is the full source cpp http://pastie.org/2800173 lua http://pastie.org/2800570 On 2 November 2011 16:58, Tony Kostanjsek <[hidden email]> wrote: > hi Phil, > > pointer from luabind::object: > > Base* ptr = luabind::object_cast<Base*>(myobject); > > as for the method call: do you derive from a C++ class in Lua and do you want to call a method from the C++ interface, or do you want to call a method that has been added in Lua, but wasn't part of the original interface? > In any case, you can resort to a Lua style construction which should always work. > > luabind::object method = globals(L)["MyClass"]["methodName"]; > int result = luabind::call_function<int>(method, instance, additionalParams) > which would be equivalent to Lua: > result = instance:methodName(additionalParams) > or alternatively > result = MyClass.methodName(instance, additionalParams) > > hth, > Tony > > On 02.11.2011, at 17:37, Phil Cooper-King wrote: > >> Hey Guys, >> >> I'm finding it quite easy to go from C++ to Lua in terms exposing >> functionality, but the other way around I'm not really understanding >> how to do it. >> >> I have C++ function >> void addObject(luabind::object) >> { >> // Get Base ptr >> // Call lua objects method. >> } >> >> How do I get the base pointer of this object (amusing its both wrapped >> and inherited), and also how do I call its lua methods. >> >> I thought the classes would be just tables, but they dont seem to >> return LUA_TTABLE. >> >> Thanks >> Phil. >> >> ------------------------------------------------------------------------------ >> RSA® Conference 2012 >> Save $700 by Nov 18 >> Register now! >> http://p.sf.net/sfu/rsa-sfdev2dev1 >> _______________________________________________ >> luabind-user mailing list >> [hidden email] >> https://lists.sourceforge.net/lists/listinfo/luabind-user > > > ------------------------------------------------------------------------------ > RSA® Conference 2012 > Save $700 by Nov 18 > Register now! > http://p.sf.net/sfu/rsa-sfdev2dev1 > _______________________________________________ > luabind-user mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/luabind-user > ------------------------------------------------------------------------------ RSA(R) Conference 2012 Save $700 by Nov 18 Register now http://p.sf.net/sfu/rsa-sfdev2dev1 _______________________________________________ luabind-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/luabind-user |
Hi Phil, I got your example to work (at lest with GCC on Linux) by changing: struct SomeBase {
virtual void tickle() = 0 {}
}; to struct SomeBase { virtual void tickle() { std::cout << "SomeBase::tickle()" << std::endl; } }; Also remember you could do: void addLuaObj( SomeBase* obj) { obj->ticklel(); } as well. Nigel On 03/11/2011, at 6:31 AM, Phil Cooper-King wrote:
------------------------------------------------------------------------------ RSA(R) Conference 2012 Save $700 by Nov 18 Register now http://p.sf.net/sfu/rsa-sfdev2dev1 _______________________________________________ luabind-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/luabind-user |
Thanks guys, yep the = 0 thing did the trick.
although the luabind::object method = globals(L)["MyClass"]["methodName"]; int result = luabind::call_function<int>(method, instance, additionalParams) still didn't work, although that isn't very important for me right now. I didn't realise I could use the void addObj(Somebase* obj); That is alot handier. On 2 November 2011 22:13, Nigel Atkinson <[hidden email]> wrote: > Hi Phil, > I got your example to work (at lest with GCC on Linux) by changing: > > struct SomeBase { > virtual void tickle() = 0 {} > }; > > to > > struct SomeBase { > virtual void tickle() { std::cout << "SomeBase::tickle()" << std::endl; } > }; > > That is, I got rid of the " = 0 " bit on the method. And it seemed to work, > also with the bit you commented out back in. GCC alerted me to the pure but > not function when I tried compiling. > Also remember you could do: > void addLuaObj( SomeBase* obj) > { > obj->ticklel(); > } > as well. > Nigel > > On 03/11/2011, at 6:31 AM, Phil Cooper-King wrote: > > Thanks Tony, > > there must be something else going on. > > Base* ptr = luabind::object_cast<Base*>(myobject); > > causes a crash, > and also > > luabind::object method = globals(L)["MyClass"]["methodName"]; > int result = luabind::call_function<int>(method, instance, additionalParams) > > causes a crash. > > this is the full source > cpp http://pastie.org/2800173 > lua http://pastie.org/2800570 > > On 2 November 2011 16:58, Tony Kostanjsek <[hidden email]> wrote: > > hi Phil, > > pointer from luabind::object: > > Base* ptr = luabind::object_cast<Base*>(myobject); > > as for the method call: do you derive from a C++ class in Lua and do you > want to call a method from the C++ interface, or do you want to call a > method that has been added in Lua, but wasn't part of the original > interface? > > In any case, you can resort to a Lua style construction which should always > work. > > luabind::object method = globals(L)["MyClass"]["methodName"]; > > int result = luabind::call_function<int>(method, instance, additionalParams) > > which would be equivalent to Lua: > > result = instance:methodName(additionalParams) > > or alternatively > > result = MyClass.methodName(instance, additionalParams) > > hth, > > Tony > > On 02.11.2011, at 17:37, Phil Cooper-King wrote: > > Hey Guys, > > I'm finding it quite easy to go from C++ to Lua in terms exposing > > functionality, but the other way around I'm not really understanding > > how to do it. > > I have C++ function > > void addObject(luabind::object) > > { > > // Get Base ptr > > // Call lua objects method. > > } > > How do I get the base pointer of this object (amusing its both wrapped > > and inherited), and also how do I call its lua methods. > > I thought the classes would be just tables, but they dont seem to > > return LUA_TTABLE. > > Thanks > > Phil. > > ------------------------------------------------------------------------------ > > RSA® Conference 2012 > > Save $700 by Nov 18 > > Register now! > > http://p.sf.net/sfu/rsa-sfdev2dev1 > > _______________________________________________ > > luabind-user mailing list > > [hidden email] > > https://lists.sourceforge.net/lists/listinfo/luabind-user > > > ------------------------------------------------------------------------------ > > RSA® Conference 2012 > > Save $700 by Nov 18 > > Register now! > > http://p.sf.net/sfu/rsa-sfdev2dev1 > > _______________________________________________ > > luabind-user mailing list > > [hidden email] > > https://lists.sourceforge.net/lists/listinfo/luabind-user > > > ------------------------------------------------------------------------------ > RSA(R) Conference 2012 > Save $700 by Nov 18 > Register now > http://p.sf.net/sfu/rsa-sfdev2dev1 > _______________________________________________ > luabind-user mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/luabind-user > > > ------------------------------------------------------------------------------ > RSA(R) Conference 2012 > Save $700 by Nov 18 > Register now > http://p.sf.net/sfu/rsa-sfdev2dev1 > _______________________________________________ > luabind-user mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/luabind-user > > ------------------------------------------------------------------------------ RSA(R) Conference 2012 Save $700 by Nov 18 Register now http://p.sf.net/sfu/rsa-sfdev2dev1 _______________________________________________ luabind-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/luabind-user |
Free forum by Nabble | Edit this page |