3

我试图让 Lua 使用新的编程语言 D。一切正常(库、lua52.dll 等)但luaL_getmetatable崩溃。本来dlua中没有定义该函数,但我添加了它:

    //C     #define luaL_getmetatable(L,n)  (lua_getfield(L, LUA_REGISTRYINDEX, (n)))
    void luaL_getmetatable(lua_State* L, const(char)* s) {
        lua_getfield(L, LUA_REGISTRYINDEX, s);
    }

但是当我运行时:

    L = lua_open();
    luaL_openlibs(L);
    // prevent script kiddies
    luaL_dostring(L, "os = nil; io = nil");
    // reprogram 'print'
    luaL_newmetatable(L, "vector");
    luaL_getmetatable(L, "vector"); // CRASH

它崩溃了。任何想法为什么会这样?

4

2 回答 2

8

听起来您使用的是古老的dlua绑定,而不是一直使用的LuaDluaL_getmetatable

但是,这些绑定以及您的代码都适用于 Lua 5.1,而不是 5.2;确保链接到正确版本的 Lua。Lua 5.2中没有lua_open(并且在 5.1 中已弃用)。

如果在链接到正确的库后遇到同样的问题,我建议使用宏LUA_USE_APICHECK集编译 Lua 并再次尝试查看到底出了什么问题。

于 2012-04-25T23:20:04.363 回答
1

也许你应该看看现有的 Lua-Bindings for D, LuaD

于 2012-04-25T13:30:27.250 回答