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值。这样,您对注册表的使用不会影响其他人对它的使用