4

古い Lua 5.1 コードを Lua 5.2 に移植する際に問題が発生しています。標準の Lua 5.2 dll/lib を使用できるようにしたいので、Lua 5.2 用の既存の API を使用して移植を完了する必要があります。もう少し複雑にするためにDllImport、Lua API 呼び出しのいくつかを P/Invoke に使用しています。これは、#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 nArgs, int nResults, int errfunc, int ctx, [MarshalAs(UnmanagedType.FunctionPtr)]LuaCSFunction function);
lua_pcallk(luaState, nArgs, nResults, errfunc, 0, null);

8a) 交換する

lua_getfield(luaState, LUA_REGISTRYINDEX, meta);

8b) あり

luaL_setmetatable(IntPtr luaState, string meta);

9a) 交換する

lua_rawset(luaState, LUA_REGISTRYINDEX);

9b) あり

lua_settable(luaState, -3);

現在、すべてがコンパイルされていますが、メモリ アクセス違反の例外が発生します。これは、何かを間違って置換した可能性があることを意味します。どんな助けでも大歓迎です。

4

1 に答える 1