使用自制的Lua C ++绑定,我可以创建可从Lua脚本获得的C ++类。
现在我想在Lua脚本中创建类对象,在C ++中存储它的引用,并在需要时从C ++代码调用这个Lua类对象的函数。
在Lua脚本中,我创建了一个带有全局函数的类对象,以将其传递给C ++代码。
MyClass = {}
function MyClass:hello()
debug.codeSite.sendMsg( "MyClass:hello()" )
end
function MyClass:new()
local tNewClass = {}
setmetatable( tNewClass, self )
self.__index = self
return tNewClass
end
local tClass = MyClass:new()
function getClass()
debug.codeSite.sendMsg( "Return class object" )
return tClass;
end
现在在C ++中我想得到它的实例并调用函数hello()。 在这里我尝试了:
此时我不知道如何将此指针推回到Lua堆栈,因此将Lua表推回堆栈,按下函数名称然后调用它。
所有这一切的想法是在Lua脚本中创建多个对象并在C ++中使用它们。
在lua:
tObject1 = MyClass:new()
tObject2 = MyClass:new()
并在C ++中根据需要使用tObject1:hello()或tObject2:hello()。
修改:
根据此description of lua_topointer(),将Lua表转换为C指针仅用于调试目的。
感谢。
答案 0 :(得分:1)
使用luaL_ref()将lua对象存储在预定义的Lua注册表中,并在c ++中保存返回的整数索引。当你需要Lua对象放在Lua堆栈上时,使用lua_rawgeti()从注册表中读取它,使用之前检索的索引。 当你不再需要在c ++方面使用它时,不要忘记使用luaL_unref()取消对象。