S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
我的做法:
在exe - main() 里
lua_pushlightuserdata(L,(void*)g_TestObj.get());// g_TestObj 是个全局变量
lua_setfield(L, LUA_REGISTRYINDEX,"lua_testobj");

exe 调用 lua, lua 调用 dll , dll 的 luaopen_xxx 函数
lua_getfield(L, LUA_REGISTRYINDEX,"lua_testobj");CTestObj* pTestObj =static_cast<CTestObj*>( lua_touserdata(L,-1));
报错
addTest.lua:9 attempt to index local 'testobj' (a userdata value)

经过几次尝试:
发现在
dll 的 其它函数 lua_getfield() 不会报错, 只有在 luaopen_xxx() 才会报
后面查了下文档, lua_touserdata() 不会改变堆栈(之前一直以为会 pop )
于是在 luaopen_xxx 后面加了一句 lua_pop(L, 1);

dll 的 luaopen_xxx 不会再报错了 :)
attempt to index local 'testobj' (a userdata value) 错,始终不是很明白它的意思

Feedback

# re: ./lua/addtest.lua:9: attempt to index local 'testobj' (a userdata value)  回复  更多评论   

2014-12-18 15:08 by 网络兼职
lua_touserdata() 不会改变堆栈

# re: ./lua/addtest.lua:9: attempt to index local 'testobj' (a userdata value)  回复  更多评论   

2014-12-19 16:48 by 陈冠希
c++对象导到lua之后成为了一个“userdata ”,原来上面的成员、方法都会访问不了的,只是一个普通的内存块,如果想用,要把方法也倒到Lua。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理