test.exe вызывает addTest.lua и устанавливает lua_testobj
в таблицу, а addTest.lua вызывает testobj.dll, но testobj.dll не может получить «lua_testobj»
сообщение об ошибке
addTest.lua:9 попытка проиндексировать локальный 'testobj' (значение пользовательских данных)
test.exe
L = luaL_newstate(); // link lua lib luaL_openlibs(L); // addLuaCPath( L, "./clib/?.dll" ); // lua_pushlightuserdata(L, (void*)g_TestObj.get()); // g_TestObj is a global vars lua_setfield(L, LUA_REGISTRYINDEX, "lua_testobj"); // int err = 0; err = luaL_loadfile( L, "./lua/addTest.lua" ); if( err != LUA_OK ) printf("Failed to load addTest.lua![%s]", lua_tostring(L,-1)); err = lua_pcall( L, 0, 1, 0 ); if( err != LUA_OK ) printf("Failed to call addTest.lua![%s]", lua_tostring(L,-1));
код addtest.lua следующий
local luapath = package.path local cpath = package.cpath print(luapath) print(cpath) local testobj= require "testobj" testobj.addTest()
и исходный код testobj.dll следующий
static int laddTest(lua_State *L) { lua_getfield(L, LUA_REGISTRYINDEX, "lua_testobj"); return 1; } extern "C" int __declspec(dllexport) luaopen_testobj(lua_State *L) { luaL_Reg l[] = { { "addTest", laddTest }, { NULL, NULL }, }; luaL_checkversion(L); luaL_newlib(L,l); lua_getfield(L, LUA_REGISTRYINDEX, "lua_testobj"); CTestObj* pTestObj = static_cast<CTestObj*>( lua_touserdata(L,-1) ); return 1; }
lua_testobj
. - person greatwolf   schedule 17.12.2014