C++ 在c+中使用lua对象+;

C++ 在c+中使用lua对象+;,c++,oop,lua,C++,Oop,Lua,我想做这样的东西: 1.在Lua中创建对象 2.将此对象获取到C++ 3.在这个对象上执行一些方法,从C++传递它 现在我在Lua有了这个: Account = {balance = 0} function Account.Create(name) local a = Account:new(nil, name); return a; end function Account:new (o, name) o = o or {name=name} setmetatab

我想做这样的东西:
1.在Lua中创建对象
2.将此对象获取到C++
3.在这个对象上执行一些方法,从C++传递它


现在我在Lua有了这个:

Account = {balance = 0}

function Account.Create(name)
    local a = Account:new(nil, name);
    return a;
end

function Account:new (o, name)
  o = o or {name=name}
  setmetatable(o, self)
  self.__index = self
  return o
end

function Account:Info ()
  return self.name;
end
C代码++

//get Lua object

lua_getglobal (L, "Account");
lua_pushstring(L, "Create");
lua_gettable(L, -2);
lua_pushstring(L, "SomeName");
lua_pcall(L, 1, 1, 0);
const void* pointer = lua_topointer(L, -1);
lua_pop(L, 3);

//then I want to perform some method on object

lua_getglobal (L, "Account");
lua_pushstring(L, "Info");
lua_gettable(L, -2);
lua_pushlightuserdata(L,(void*) pointer );
lua_pcall(L, 0, 1, 0);
//NOW I GET "attempt to index local 'self' (a userdata value)'
const char* str = lua_tostring(L, -1);
...etc...
你知道我做错了什么吗?如何将这个LUA对象获取到C++?< /P>
const void* pointer = lua_topointer(L, -1);
Lua表不是C对象。它们不是
void*
s。声明该函数主要用于调试目的。你没有调试任何东西

Lua表只能通过Lua API访问。你不能只得到一个指向Lua表或其他东西的指针。相反,您需要做的是将Lua表存储在一个位置,然后在需要访问它时从该位置检索它。存储此类数据的典型位置是Lua注册表。Lua代码无法访问它;只有C-API才能与之对话

通常,您将在注册表中存储一些表,其中包含您当前持有的所有Lua值。这样,您对注册表的使用不会影响其他人对它的使用