c# – 从Lua 5.1移植到5.2
发布时间:2020-12-15 22:11:13 所属栏目:百科 来源:网络整理
导读:我有一些问题将一些旧的Lua 5.1代码移植到Lua 5.2.我希望能够使用Lua 5.2 dll / lib库存,因此需要使用现有的Lua 5.2 API完成任何移植.为了使它更复杂一点,我使用DllImport来P / Invoke一些Lua API调用.这意味着提供的任何#define快捷方式都不起作用.例如,使
我有一些问题将一些旧的Lua 5.1代码移植到Lua 5.2.我希望能够使用Lua 5.2 dll / lib库存,因此需要使用现有的Lua 5.2 API完成任何移植.为了使它更复杂一点,我使用DllImport来P / Invoke一些Lua API调用.这意味着提供的任何#define快捷方式都不起作用.例如,使用lua_pushglobaltable是不可能的.大多数更新都是必需的,因为LUA_REGISTRYINDEX不再可访问.
到目前为止我所拥有的是以下内容: 1a)更换 lua_pushstring(luaState,"tablename"); lua_settable(luaState,LUA_REGISTRYINDEX); // LUA_REGISTRYINDEX no longer accessible 1b)随着 lua_setglobal(luaState,"tablename"); 2a)替换 lua_pushstring(luaState,"tablename"); lua_gettable(luaState,LUA_REGISTRYINDEX); // LUA_REGISTRYINDEX no longer accessible 2b)随着 lua_getglobal(luaState,"tablename"); 3a)替换 lua_pushvalue(luaState,LUA_GLOBALSINDEX); 3b)随着 // not sure,something equivalent to lua_pushglobaltable(L) 4a)替换 lua_replace(luaState,LUA_GLOBALSINDEX); 4b)随着 // I dont even have a guess here 5a)替换 luaL_ref(luaState,(int)LuaIndexes.LUA_REGISTRYINDEX); // also luaL_unref 5b)随着 luaL_ref(luaState,<some arbitrary constant>); // this is probably wrong 6a)更换 lua_rawgeti(luaState,LUA_REGISTRYINDEX,reference); 6b)随着 lua_rawgeti(luaState,<same arbitrary constant>,reference); // this is probably wrong 7a)更换 lua_pcall(IntPtr luaState,int nArgs,int nResults,int errfunc); 7b)随着 lua_pcallk(IntPtr luaState,int errfunc,int ctx,[MarshalAs(UnmanagedType.FunctionPtr)]LuaCSFunction function); lua_pcallk(luaState,nArgs,nResults,errfunc,null); 8a)更换 lua_getfield(luaState,meta); 8b)随着 luaL_setmetatable(IntPtr luaState,string meta); 9a)更换 lua_rawset(luaState,LUA_REGISTRYINDEX); 9b)随着 lua_settable(luaState,-3); 现在一切都编译,但我得到内存访问冲突异常,这意味着我可能错误地替换了一些东西.任何帮助,将不胜感激. 解决方法
我相信我已经设法升级了这个,所以我将添加下面的内容和转换的详细信息.我在LUA低级API中创建了一个C包装器来导出我需要的功能:
1a)替换 lua_settable(luaState,LUA_REGISTRYINDEX); // LUA_REGISTRYINDEX no longer accessible 1b)随着 lua_settablereg(luaState); 2a)替换 lua_gettable(luaState,LUA_REGISTRYINDEX); // LUA_REGISTRYINDEX no longer accessible 2b)随着 lua_gettablereg(luaState); 3a)替换 lua_pushvalue(luaState,LUA_GLOBALSINDEX); 3b)随着 lua_pushglobaltablefunction(luaState) 4a)替换 lua_replace(luaState,LUA_GLOBALSINDEX); 4b)随着 lua_popglobaltablefunction(luaState) 5a)替换 luaL_ref(luaState,(int)LuaIndexes.LUA_REGISTRYINDEX); // also luaL_unref 5b)随着 luaL_refreg(luaState); // also luaL_unrefreg 6a)替换 lua_rawgeti(luaState,reference); 6b)随着 lua_rawgetireg(luaState,reference); 7a)替换 lua_pcall(luaState,errfunc); 7b)随着 lua_pcalla(luaState,errfunc); 8a)替换 lua_getfield(luaState,meta); 8b)随着 lua_getfieldreg(luaState,string meta); 9a)替换 lua_rawset(luaState,LUA_REGISTRYINDEX); 9b)随着 lua_rawsetreg(luaState); 定义如下: __declspec(dllexport) void lua_pushglobaltablefunction(lua_State *L) { lua_pushglobaltable(L); } __declspec(dllexport) void lua_popglobaltablefunction(lua_State *L) { lua_rawseti(L,LUA_RIDX_GLOBALS); } __declspec(dllexport) int luaL_regref(lua_State *L) { return luaL_ref(L,LUA_REGISTRYINDEX); } __declspec(dllexport) void luaL_unregref(lua_State *L,int reference) { luaL_unref(L,reference); } __declspec(dllexport) void lua_settablereg(lua_State *L) { lua_settable(L,LUA_REGISTRYINDEX); } __declspec(dllexport) void lua_gettablereg(lua_State *L) { lua_gettable(L,LUA_REGISTRYINDEX); } __declspec(dllexport) void lua_rawsetreg(lua_State *L) { lua_rawset(L,LUA_REGISTRYINDEX); } __declspec(dllexport) void lua_rawgetreg(lua_State *L) { lua_rawget(L,LUA_REGISTRYINDEX); } __declspec(dllexport) void lua_rawgetireg(lua_State *L,int reference) { lua_rawgeti(L,reference); } __declspec(dllexport) void lua_getfieldreg(lua_State *L,const char *fieldname) { lua_getfield(L,fieldname); } __declspec(dllexport) int luaL_loadbuffername(lua_State *L,const char *buff,int size,const char * name) { return luaL_loadbuffer(L,buff,size,name); } __declspec(dllexport) double lua_tonum(lua_State *L,int index) { return lua_tonumber(L,index); } __declspec(dllexport) int lua_pcalla(lua_State *L,int errfunc) { return lua_pcall(L,errfunc); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |