我的做法:
在exe - main() 里
lua_pushlightuserdata(L,(void*)g_TestObj.get());// g_TestObj 是個(gè)全局變量
lua_setfield(L, LUA_REGISTRYINDEX,"lua_testobj");
exe 調(diào)用 lua, lua 調(diào)用 dll , dll 的 luaopen_xxx 函數(shù)
lua_getfield(L, LUA_REGISTRYINDEX,"lua_testobj");CTestObj* pTestObj =static_cast<CTestObj*>( lua_touserdata(L,-1));
報(bào)錯(cuò)
addTest.lua:9 attempt to index local 'testobj' (a userdata value)經(jīng)過(guò)幾次嘗試:
發(fā)現(xiàn)在
dll 的 其它函數(shù) lua_getfield() 不會(huì)報(bào)錯(cuò), 只有在 luaopen_xxx() 才會(huì)報(bào)
后面查了下文檔, lua_touserdata() 不會(huì)改變堆棧(之前一直以為會(huì) pop )
于是在 luaopen_xxx 后面加了一句
lua_pop(L, 1);dll 的 luaopen_xxx 不會(huì)再報(bào)錯(cuò)了 :)
但
attempt to index local 'testobj' (a userdata value) 錯(cuò),始終不是很明白它的意思