lua - D Lua 不能被元化

标签 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);
    }

但是当我运行时:

    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

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

最佳答案

听起来您使用的是古老的 dlua绑定(bind),而不是 LuaD , 一直有 luaL_getmetatable .

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

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

关于lua - D Lua 不能被元化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10316585/

相关文章:

c - C端嵌入Lua模块

d - “别名”已损坏。怎么办?

compiler-construction - 使用哪个 D 编译器?

c++ - 在 C++ 中访问 Lua 函数的返回值,反之亦然

audio - Microsoft WAV从样本中提取频率

lua - lua 中有什么不同需要路径与 "/"或 "."

fork - 是否有 fork 并与 D 中的子进程通信的示例?

'D'语言是否支持VLA之类的 'C'?

d - D2 语言准备好用于生产了吗?

c++ - 将 Lua 代码转换为 C++ 类并返回 C++