我的做法:
在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) 错,始终不是很明白它的意思