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