D Lua没有得到满足

use*_*4D4 3 lua d

我正在尝试让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);
    }
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时:

    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
Run Code Online (Sandbox Code Playgroud)

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

jA_*_*cOp 8

听起来你正在使用古老的dlua绑定,而不是LuaD,它一直都有luaL_getmetatable.

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

如果在链接到正确的库后遇到相同的问题,我建议使用宏LUA_USE_APICHECK集编译Lua 并再次尝试查看确切的错误.