To And From C++

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

To And From C++

Phil Cooper-king-2
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
Reply | Threaded
Open this post in threaded view
|

Re: To And From C++

Tony Kostanjsek
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&#174; Conference 2012
> Save $700 by Nov 18
> Register now&#33;
> http://p.sf.net/sfu/rsa-sfdev2dev1
> _______________________________________________
> luabind-user mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/luabind-user


------------------------------------------------------------------------------
RSA&#174; Conference 2012
Save $700 by Nov 18
Register now&#33;
http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________
luabind-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/luabind-user
Reply | Threaded
Open this post in threaded view
|

Re: To And From C++

Phil Cooper-king-2
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&#174; Conference 2012
>> Save $700 by Nov 18
>> Register now&#33;
>> http://p.sf.net/sfu/rsa-sfdev2dev1
>> _______________________________________________
>> luabind-user mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/luabind-user
>
>
> ------------------------------------------------------------------------------
> RSA&#174; Conference 2012
> Save $700 by Nov 18
> Register now&#33;
> 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
Reply | Threaded
Open this post in threaded view
|

Re: To And From C++

Nigel Atkinson-2
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&#174; Conference 2012
Save $700 by Nov 18
Register now&#33;
http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________
luabind-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/luabind-user


------------------------------------------------------------------------------
RSA&#174; Conference 2012
Save $700 by Nov 18
Register now&#33;
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
Reply | Threaded
Open this post in threaded view
|

Re: To And From C++

Phil Cooper-king-2
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&#174; Conference 2012
>
> Save $700 by Nov 18
>
> Register now&#33;
>
> http://p.sf.net/sfu/rsa-sfdev2dev1
>
> _______________________________________________
>
> luabind-user mailing list
>
> [hidden email]
>
> https://lists.sourceforge.net/lists/listinfo/luabind-user
>
>
> ------------------------------------------------------------------------------
>
> RSA&#174; Conference 2012
>
> Save $700 by Nov 18
>
> Register now&#33;
>
> 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