繁体   English   中英

将Lua类对象存储到C指针,并将其推回Lua Stack

[英]Store Lua class object to C pointer and push it back to Lua Stack

使用自制的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()。 这是我尝试的:

  1. 调用getClass(),以便将Lua对象(一个表)压入堆栈。
  2. 使用函数lua_topointer()将其地址存储到C ++ const void *中。

在这一点上,我不知道如何将这个指针推回Lua堆栈,因此Lua表被推回了堆栈,压入了函数名,然后调用了它。

所有这些的想法是在Lua脚本中创建几个对象,然后在C ++中使用它们。

在lua中:

tObject1 = MyClass:new()
tObject2 = MyClass:new()

在C ++中,在需要时使用tObject1:hello()或tObject2:hello()。

编辑:

根据lua_topointer()的描述 ,将Lua表转换为C指针仅用于调试目的。

谢谢。

使用luaL_ref()将lua对象存储在预定义的Lua注册表中,并在c ++中保存返回的整数索引。 当您需要将Lua对象放在Lua堆栈上时,请使用较早检索到的索引通过lua_rawgeti()从注册表中读取它。 当您不再需要c ++方面的对象时,请不要忘记使用luaL_unref()取消引用对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM